gdb 常用命令

基本信息查看

栈信息

不管是操作转储文件还是用 GDB 设置断点进行调试,都可以输入 (gdb)bt 打印栈内容进行查看。一般的宕机 BUG,看下宕机的位置,然后看下源代码基本就可以解决了。但是很多情况下简单的 (gdb)bt 还查不到问题,这时候就要涉及到比较复杂的操作。下面罗列了一些对栈的操作:

变量

调试 BUG 过程中查看变量信息是很有帮助的操作,查看方式如下:

寄存器

对于调试来说寄存器中的值也很重要,可以查看到当前正在执行的指令的地址等。具体操作罗列如下:

格式 说明
x 显示为十六进制数
d 显示为十进制数
u 显示位为符号十进制数
o 显示为八进制数
t 显示为二进制数
a 显示为地址
c 显示为字符(ASCII)
f 显示为浮点数
s 显示为字符串
i 显示为机器语言(仅在显示内存的 x 命令中可用)

内存

可以查看具体内存地址中的内容,比如:目前执行的汇编指令,以及栈中的内容等。

调试

断点:

调试程序中,设置断点进行调试是最方便有效的手段,因此学会如果灵活设置断点是调试的基本功。

设置断点
查看、删除断点
设置无效、有效断点

监视点

可以监视某个变量,在变量被访问或者被修改时程序会在当前点进入断点。删除,查看监视点的方式与断点相同。设置监视点方式如下:

条件断点

在调试程序过程中,有时候我们只想在某个条件下停止程序,然后进行单步调试,而条件断点就是为此而设计。下面是条件断点的操作方式:

断点命令

每次断点发生时候,想要查看的变量很多时,如果每个变量都手动 print 则需要浪费很多时间。断点命令可以在断点发生时批量执行 GDB 命令。下面是断点命令的设置方式:

反复执行

单步执行时如果进入了你不关心的函数,你想立即跳出函数;或者进入了大循环中,你想立即循环。下面的命令可以帮到你:

设置变量值

对变量的值进行控制,可以更快的调试自己的程序。下面就是设置变量值的方法:

手动生成转储文件