Linux之gdb调试工具

时间:2021-11-14 10:58:59

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调试