GDB的使用
GDB(GNU Debugger)是 Linux 环境下功能强大的调试工具,可用于调试 C、C++ 等语言编写的程序。
1.安装gdb
在shell命令行输入
sudo apt install gdb
检验gdb是否存在
gdb --version
2.gdb的使用
这里写一个test.c,输入编译命令进入gdb
gcc -g test.c
gdb ./a.out
命令的使用
命令 | 功能描述 |
---|---|
l 或 list | 显示源代码(默认 10 行) |
b <行号/函数名> | 在指定行号或函数入口处设置断点 |
r 或 run | 运行程序(遇到断点会暂停) |
n 或 next | 单步执行(不进入函数内部) |
s 或 step | 单步执行(进入函数内部) |
c 或 continue | 继续执行(直到下一个断点或程序结束) |
q 或 quit | 退出 GDB |
p <变量名> | 打印变量值 |
bt 或 backtrace | 显示函数调用栈 |
frame <编号> | 切换到指定栈帧 |
info break | 查看断点信息 |
d <断点编号> | 删除指定断点 |
disable <断点编号> | 禁用断点 |
enable <断点编号> | 启用断点 |
watch <变量名> | 设置观察点(变量值变化时暂停) |
r 或 run 运行程序(遇到断点会暂停)
q 或 quit 退出 GDB
l 或 list 显示源代码(默认 10 行)
b <行号/函数名> 在指定行号或函数入口处设置断点
info break 查看断点信息
n 或 next 单步执行(不进入函数内部)
p <变量名> 打印变量值
s 或 step 单步执行(进入函数内部)
gdb的小技巧
1.可以调用终端的shell命令
例如:
shell ls
2.日志功能
set logging on
当你退出后可以查看生成的gdb.txt查看gdb的使用过程
3.watchpoint
观察变量是否变化,info来查看watchpoint
调试core文件
我们先编写一个测试程序
此时运行这个程序会崩溃掉
在 Linux 下调试 core 文件是定位程序崩溃原因的关键手段,默认情况下,系统可能限制或禁用了 core 文件生成,需要先配置:
ulimit -a 命令用于显示当前用户的所有资源限制设置
临时设置
ulimit -c unlimited # 不限制core文件大小
此时就可以生成core文件了
执行
gcc -g test_err.c
gdb ./a.out
用ll查看生成的core文件
注:如果临时设置了仍然不能生成core文件需要在shell命令行执行
sudo service apport stop
即可生成core文件
然后执行
gdb ./a.out core
即可调试core文件
调试正在运行的程序
先编写一个死循环的测试程序
然后执行,编译程序和让程序在后台执行
gcc -g test_for.c
./a.out &
得到进程号之后执行
sudo gdb -p <进程号>
即可调试正在运行的程序