1. 启动gdb
在使用gdb调试C/C++程序前,必须要使用gcc -g命令生成带有调试信息的可执行程序:
$ gcc -g -o hello Hello.c
然后就可以使用gdb来对生成的hello二进制文件进行调试了。
$ gdb hello
gdb会首先在屏幕上答应一些其版本信息,然后显示提示符(gdb)等待用户指令。
2. 获取帮助
任何时候都能够使用help命令来查看帮助信息:
(gdb) help
可以查看具体命令的帮助信息,如breakpoints
(gdb)help breakpoints
3. 查看源代码
使用list命令(缩写l)用于查看程序的源代码,gdb会自动在程序源代码前加上行号,第一次使用list会列出前10行,再一次list会列出下10行,以此类推.
(gdb) list
也可以给list指定行号,显示行号周围的10行源程序,
(gdb) list 15
gdb还支持search命令搜索特定的内容,会显示出第一次出现待搜索内容的位置,按下回车再继续往下搜索,很明显search命令只能从头往尾搜索:
(gdb)search main
gdb提供了反向搜索命令reverse-search,search和reverse-search都支持正则表达式搜索。
4.设置断点
使用break命令对指定的行设置断点:
(gdb) break 10//在第10行设置断点
可以使用下面的命令查看,已经设置的断点的信息:
(gdb) info break
使用clear命令可以清除当前行的断点
(gdb) clear
5.运行程序和单步运行
设置完断点后就可以运行程序了,使用run命令(缩写r)运行至断点
(gdb) run
运行到断点后等待用户发出指令,使用next命令进行单步运行
(gdb) next
也可以制定一个数字让gdb连续执行n次,然后停止
(gdb)n 2
continue命令(缩写c)能够指导gdb运行至下一个断点。
(gdb)continue
还有step单步运行命令,其和next区别在于next只是老老实实的执行一步,不会进入函数内部,而step是能够进入函数内部的
6.监视变量
print命令(缩写r)能让gdb输出指定变量的值:
(gdb) print sum
但print比较麻烦,每次都需要输入print命令才能一直监视某个变量,所以gdb提供了watch命令来将某个变量设置为监视点
7. 临时修改变量
gdb提供set var命令来在程序运行时改变变量的值
(gdb) set var i=1
8.查看堆栈情况
bt命令查看当前运行时栈的情况
9. 退出gdb
使用quit命令退出gdb调试