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