文章目录
gdb是有GNU开源组织发布的一款软件,用于在unix/linux环境中使用命令行的方式进行调试程序的工具。
gdb的使用方法
启动gdb之前的准备工作
下载gdb
sudo yum install -y gdb
在输入完root密码之后,就会开始下载gdb,如果已经拥有gdb,则会出现以下提示。
拥有一个带有调试信息的可执行程序
在启动gdb之前,必须要有一个拥有调试信息的可执行程序。
如果对一个无调试信息的程序使用gdb,虽然会执行成功,但是会无法继续后面的动作(例如调试、打断点、step over等等)。同时注意一下会出现这样一句话。
正式启动gdb
注意:下面所有的操作对象,我用的是我的可调试可执行程序mybin
gdb mybin
在执行完后会出现很多内容,这些内容都是gdb的一些相关信息(版权、许可证等等),需要注意最后一句话,若出现这句话则表明可以正常使用gdb进行调试程序。
注意:中间的是我的程序mybin的绝对路径。
gdb -q mybin
执行这条命令则不会额外输出gdb的相关信息,但同样会输出上图红框内容。
从最下面的(gdb)后面开始输入指令进行调试操作。
展示源码(要先看到源码才知道接下来的步骤……)
list 行号:若不显式写行号,则默认展示10行内容
list 函数名:若不显式写函数名,则默认从main函数开始展示内容
l 行号
l 函数名
执行l
即可,l
就是list
。
小技巧:gdb会默认记录上一次执行的命令,按enter会自动执行该命令(有些可以)。
打断点
break 行号:在改行设置断点
break 函数名:在该函数的开头设置断点
b 行号
b 函数名
执行b
即可,b
就是break
。
显示所有断点信息
info breakponits
info break
info b
运行程序
run
r
执行r
即可,r
就是run
。
逐过程(VS中的F10)
next
n
执行n
即可,n
就是next
。
一句一句执行,但不进入函数内部。
逐语句(VS中的F11)
step
s
执行s
即可,s
就是step
。
一句一句执行,能够进入函数内部。
断点跳转(VS中的F5)
continue
c
执行c
即可,c
就是continue
。
显示变量名(暂时)
p 变量名
该方法只能显示一次变量名,不能够再执行程序的过程中持续显示。
显示变量内容(永久)
display 变量名
能够在执行程序的过程中持续显示(但进入到其它函数中则不会显示,重新回来就继续显示)。
取消显示永久变量内容
undisplay 取消显示所有变量
undisplay n 取消显示序号为n的变量
在用display显示变量的时候,前面会有序号。
删除断点
delete breakpoints 删除所有断点
delete break
delete breakpoints n 删除序号为n的断点
delete break n
禁用断点
disable breakpoints 禁用所有断点
disable break
disable breakpoints n 禁用序号为n的断点
disable break n
启用断点
enable breakpoints 禁用所有断点
enable break
enable breakpoints n 禁用序号为n的断点
enable break n
执行完该函数然后跳到下一步
finish
当在一个函数调用中执行finish时,会自动把该函数执行完然后跳出函数到下一步停下。
跳到某一行
until n 跳到n行
如果中间有断点,则会在断点处停下。
查看函数堆栈
bt
查看当前栈帧局部变量的值
info locals
i locals
退出gdb
quit
q