什么是GDB
GDB是一款程序调试器,它可以告诉你当你的程序运行时,里面发生了什么。
GDB可以做到的事情:
- 开始你的程序,并设置程序运行的参数
- 打断点
- 检查你的程序在运行时发生了什么
- 更改程序中的内容,这样您就可以尝试纠正一个错误的影响,并继续了解另一个错误
官方支持的语言类型:
使用GDB
终端的GDB使用
- 可执行文件要编译成gdb可调试程序
gcc -g main.cpp -o a.out
-g
是GDB的参数,表示用gcc把源文件编译成gdb的调试程序 - 运行可执行文件
gdb a.out
- 命令
- run r
运行程序 - quit q
退出程序 - break b
打断点,可以简写为b。
b <func> 在func函数打断点
b <line_number> 在第n行打断点
info b 查看断点信息
delete <number> 删除断点,断点号用info b查看
disable <number> 禁用断点
enable <number> 启用断点
- next n
继续运行代码,可以简写为n - list
输出代码 - print p
p <var>
查看当前变量的值 - step s
s
进入函数,可以进到函数内查看函数内容 - set
手动修改变量值set a=1
backtrace - bt
查看堆栈
小技巧
- 在gdb调试过程中,也可以使用shell命令
- 使用
set logging on
可以把调试的日志输出 - watchpoint:查看变量是否改变,当变量改变时,程序会暂停
watch <addr_var>
本质上是检测一个地址
info watchpoint
查看watchpoint断点
catchponit和watchpoint相关内容
core文件
- 我们调试程序时,很多情况时因为程序挂掉了。这时候需要我们去debug,重头再运行等报错是一件很蠢的事情,我们可以利用core文件高效解决这个问题。当程序因报错退出时,如果生成了core文件,就可以使用gdb去查看出错的信息。
gdb <bin> <core>
- 如何生成core文件:
ulimit -a 查看ulimit限制
ulimit -c unlimited 执行程序出错时会生成core文件(如段错误)
调试正在运行的程序
gdb -p <pid>
抓进程可以用ps -ef | grep <name>