Linux调试工具GDB使用简易教程

  

本文所述主要的是Linux调试工具GDB的使用教程,具体如下。

  

<>强声明:本博客内容是由本人经过实验楼教程整理得来。

  

  

GDB,是GNU项目调试器的缩写,是Linux下功能全面的调试工具.GDB支持断点,单步执行,打印变量,观察变量,查看寄存器,查看堆栈等调试手段。在Linux环境软件开发中,GDB是主要的调试工具,用来调试C和c++程序。

  

  

下面给出一个具有buging.c的程序:

        (yqtao@localhost linux)猫buging.c美元   # include & lt; stdio.h>   int getSum (int n) {   int和=0,我;   (i=1; i<=n;我+ +)   +=我总和;   返回总和;   }   int main () {   int res=getSum (100);   printf (" 1 + 2 +…+ 100=% d \ n ", res);   } 之前      

如果要调试程序,则在进行gcc编译的时候要加上- g参数
  

  

<代码> gcc - g - o窃听bugging.c

  

进入gdb:

  

<代码> gdb错误代码

  

部分gdb命令:

  

癓inux调试工具GDB使用简易教程"

     //查看源码//查看第几行附近//可简写成l 2   (gdb)清单2所示   1 # include & lt; stdio.h>   2 int getSum (int n) {   3 int和=0,我;   4 (i=1; i<=n;我+ +)   5 +=我总和;   6返回总和;   7}//查看主要函数附近的源码   主要(gdb)列表   3 int和=0,我;   4 (i=1; i<=n;我+ +)   5 +=我总和;   6返回总和;   7}   8 int main () {   9 int res=getSum (100);   10 printf (" 1 + 2 +…+ 100=% d \ n ", res);   11}//设置断点//中断+ n在第几行设断点   (gdb) 8   断点1 0 x4004fa:文件错误。c, 8号线。//中断+函数名,在函数名处设断点   (gdb)打破getSum   断点2 0 x4004cb:文件错误。c,第3行。//查看断点信息   (gdb)信息断点   Num类型Disp Enb解决什么   1断点保持y 0 x00000000004004fa主要在buging.c: 8   2断点保持y 0 x00000000004004cb getSum buging.c: 3      

断点信息中每一项的信息:

  

1。Num列代表断点编号,该编号可以作为删除/enalbe/禁用等控制断点命令的参数
  2.类型列代表断点类型,一般为断点
  3.Disp列代表断点被命中后,该断点保留(保持),删除(del)还是关闭(dis)
  4.Enb列代表该断点是使(y)还是禁用(n)
  5.地址列代表该断点处虚拟内存的地址
  6.所列代表该断点在源文件中的信息

     //删除断点//删除+ n或d + n//如果不加数字则删除全部的断点   (gdb) d 2   (gdb)信息断点   Num类型Disp Enb解决什么   1断点保持y 0 x00000000004004fa主要在buging.c: 8      

关闭和启用断点:

  

有时候,我们会遇到这种情况:有些断点可能暂时不用但又不想删除,那么可以禁用。

        禁用+ n//关闭断点   启用+ n//启动断点      

  

以本文开头的buging.c文件为例,进行单步调试。

     //进入gdb   (yqtao@localhost linux)美元gdb bug//在main()函数处设断点   (gdb)信息断点//运行程序   (gdb)运行   在buging.c断点,main (): 9   9 int res=getSum (100);      

注意:我们要进入函数要是用步骤(s),而单步执行下(n),接下来是不进入函数内部的,要区分两者的关系。

        (gdb)步骤   在buging.c getSum (n=100): 4   4 (i=1; i<=n;我+ +)//查看代码   (gdb) l   1 # include & lt; stdio.h>   2 int getSum (int n) {   3 int和=0,我;   4 (i=1; i<=n;我+ +)   5 +=我总和;   6返回总和;   7}   8 int main () {   9 int res=getSum (100);   10 printf (" 1 + 2 +…+ 100=% d \ n ", res);//下一步   (gdb)   5 +=我总和;//打印求和的值//看到总和是为赋初值的   (gdb) p和   1美元=4195633//info locals//打印当前断点处所在函数的所有局部变量的值,不包括函数参数。   当地人(gdb)信息   金额=4195635   我=3      

<强>其余的一些命令:

  


结束   

  

执行程序到当前函数结束

  

继续
  

  

执行程序到下个断点

  


  

  

直到N,执行程序到源代码的某一行

  

  

Linux调试工具GDB使用简易教程