UNIX及UNIX-like环境下的调试工具gdb使用方法
准备工作
我们首先要将可执行程序变成debug版本。gcc编译器默认是release版本发布,那我们怎么将其变成debug版本呢?只需要在makefile文件中加上-g。
debug版本和release版本的区别
先从文件大小初见端倪,debug版本的文件是要比release版本的文件大的
那我们具体如何在Linux环境下调试程序呢?
首先我们需要输入这样的一个命令:gdb+可调式程序名,注意这个程序必须是以debug版本发布的,也就是需要在makefile文件中用-g进行书写。
我们简写r,就可以直接运行程序(run),默认就是跑完了,但我们像调试的的话,需要打断点,那我们怎么打断点呢?
b + 行号就是给这一行打断点
如果有多文件,我们就是文件名+行号也是可以打的
info b用来查看断点
那如何删掉断点呢?
d 断点编号就是删除断点,注意这里的编号并不是行号,是断点的编号!
这里的第一列才是断点的编号
那我们如何禁用断点呢,禁用断点的意思就是,这个断点不使用了,但还会留下痕迹,跟VS编译器里面的空心断点是一样的
在Linux下我们采用disable 编号的形式进行禁用
再启用就是 enable 编号的形式
n 就是逐过程 F10
s 逐语句 F11
p :显示变量的内容和地址
display:变量名/去地址 常显示变量的内容和地址
那如果不想常显示呢?
undisplay + 编号,取消常显示变量的内容和地址
quit就是退出gdb调试
c:从一个断点运行到下一个断点(范围查找)
bt:查看调用堆栈
finish:将一个函数运行结束,就停下来(范围查找)VS编译器中就没有这个功能
until:在一定范围内,直接运行到指定行
set var name = value:修改一个变量的内容(不用改代码,多分枝测试)
总结:
肯定是没有VS图形化界面调试舒服,或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。