一、GDB概论
gdb是GNU debugger的缩写,是编程调试工具。
UNIX及UNIX-like(Linux)下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓"尺有所短,寸有所长"就是这个道理。
只有一个程序在编译时加了-g选项,才能用gdb工具进行调试。
二、程序错误
编译错:编写程序的时候没有符合语言规范导致编译错误。比如:语法错误。
运行时错误:编译器检查不出这种错误,但在运行时候可能会导致程序崩溃。比如:内存地址非法访问。
逻辑错误:编译和运行都很顺利,但是程序没有干我们期望干的事情。
三、功能
一般来说,GDB主要帮助你完成下面五个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
5、当程序产生核心段错误时,可以进行CORE文件调试,查找错误。
四、使用
1、运行程序
run(r)运行程序,如果要加参数,则是run arg1 arg2 …
2、查看源代码
list(l):查看最近十行源码
list fun:查看fun函数源代码
list file:fun:查看flie文件中的fun函数源代码
3、设置断点与观察断点
break 行号/fun设置断点。
break file:行号/fun设置断点。
break if:条件成立时程序停住。
info break(缩写:i b):查看断点。
watch expr:一旦expr值发生改变,程序停住。
delete n:删除断点。
4、单步调试
continue(c):运行至下一个断点。
step(s):单步跟踪,进入函数,类似于VC中的step in。
next(n):单步跟踪,不进入函数,类似于VC中的step out。
finish:运行程序,知道当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
until:当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序知道退出循环体。
5、查看运行时数据
print(p):查看