GDB调试
常用命令:
| 命令 | 缩写 | 说明 |
|---|---|---|
| help | h | 查看帮助命令(help+命令) |
| run | r | 运行/重新运行待调试文件 |
| start | 单步运行,停在执行语句第一行 | |
| next | n | 单步步过(逐过程,运行到下一行) |
| step | s | 单步步入(逐语句,进入函数内部) |
| continue | c | 让暂停的程序继续运行 |
| until | u | 运行到指定行停下 |
| return | 立即结束当前函数并返回指定值 | |
| finish | fi | 继续执行完该函数再正常退出当前函数 |
| jump | j | 将当前程序执行流跳转到指定行或地址 (jump+行号/地址) |
| break | b | 添加断点 (break+函数/行号/文件:行号/文件:函数) |
| tbreak | tb | 添加临时断点 |
| delete | d | 删除断点 (delete+断点编号) |
| enable | 启用指定断点 (enable+断点编号) | |
| disable | 禁用指定断点 (disable+断点编号) | |
| p | 打印变量或寄存器值 (print+变量名/变量名=值) | |
| call | 调用函数 (call+函数) | |
| thread | 切换到指定线程 (thread+线程编号) | |
| backtrace | bt | 查看当前线程的调用堆栈 |
| frame | f | 切换到当前调用堆栈的指定位置(f+堆栈编号) |
| list | l | 显示源代码 (list+函数/行号/文件:行号/文件:函数) |
| watch | 监视变量或内存地址 (watch+变量) | |
| ptype | 查看变量类型 (ptype+变量名) | |
| disassemble | dis | 查看汇编代码 |
| info | i | 查看断点/线程/监视等信息 (info+break/thread/watch) |
| set args | 设置程序启动命令行参数 | |
| show args | 查看设置的命令行参数 |
安装GDB:
使用命令安装
sudo apt-get install gdb
源码安装
http://ftp.gnu.org/gnu/gdb/
# 下载源码包
wget http://ftp.gnu.org/gnu/gdb/gdb-11.2.tar.gz
# 解压gdb
tar -zxvf gdb-11.2.tar.gz
# 进入gdb
cd gdb-11.2
# 生成makefile文件
./configure
# 执行make
make
# 安装
make install
# 查看是否安装成功
gdb -v
启动GDB调试:
直接调试目标程序(附加调试后,需要run命令启动程序):
gdb [program]
附加进程id调试:
gdb [program] [pid]
调试core文件(如果开启,core文件默认生成在可执行文件运行命令的同一路径下):
gdb [program] [core]
退出GDB:
使用命令 q 或者 Ctrl+d 退出GDB
如果附加进程,退出前先 detach 解除进程
使用core
方便程序出错崩溃时,重现出错问题,使用gdb对core文件进行调试
Ubuntu生成和调试core文件
注意:
编译程序时需要加上-g,之后才能用gdb进行调试(gcc -g main.c -o main)
GDB调试
https://www.inktea.eu.org/2022/e932.html