linux中gdb的入门使用教程

  

  

gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb的使用方法,需要的朋友们下面来一起看看详细的介绍吧。

  


  

  

在代码的指定位置中断,使程序在此中断。

  
      <李>打破& lt; function>在进入指定函数时停住李   <李>打破& lt; linenum>在指定行号停住。   <李>打破+/抵消在当前行号的前面或后面的抵消行停住.offiset为自然数。   <李>打破文件名:linenum在源文件文件名的linenum行处停住。   <李>打破……如果& lt; condition>…可以是上述的参数、条件表示条件,在条件成立时停住。比如在循环境体中,可以设置休息如果我=100,表示当我为100时停住程序。   
  

<强>案例:

        (gdb)打破sc_smartcontract_handler.cpp: 45   sc_smartcontract_handler断点4 0 x424d42:文件。cpp、线45。      

对断点的相关操作

  
      <李>删除删除所有断点李   <李>删除断点[n]删除某个断点李   <李>禁用断点[n]禁用某个断点李   <李>启用断点[n]使能某个断点李   <李> info断点[n]查看当前断点信息李   
  


  

  

捕捉点用来补捉程序运行时的一些事件。如:载入共享库(动态链接库),c++的异常等。通常也是用来定位错误。

  

捕捉点的命令格式是:抓住& lt; event>事件可以是下面的内容

  
      <李>看& lt; expr>变量发生变化时中断李   <李> rwatch & lt; expr>李变量被读时中断   <李> awatch & lt; expr>变量值被读或被写时中断李   
  

可以通过信息监测点[n]命令查看当前观察点信息

  


  

  

最常用的查看变量的方法是

  
  

(gdb)打印{变量名}

           (gdb)打印命令行参数个数   1美元=1      

如果打印数组,由于默认的设置,可能打印的数组尾部部分没有显示,可以通过如下的命令设置打印数组的最大长度

  
  

(gdb)打印元素集300

     

调试中查看代码
  

  
      <李>主要列表功能如:显示主要函数附近的代码李   <李>列表文件:函数如表c:主要:显示c中主要的函数附近的代码李   <李>列表n1、n2如列表10,20,显示当前文件的10到20行李   
  

虽然列表已经很方便的了,但还是不尽人的意。如果能够在运行的同时显示代码就好了,答案是肯定的。

  

使用如下命令启动gdb: gdb tui项目名或者在启动gdb后,输入命令焦点,如图:

  

發inux中gdb的入门使用教程"

  


  

  

在gdb中,和调试步进相关的命令主要有如下几条:

  
      <李>继继续续运行程序直到下一个断点(类似于VS里的F5)   <李>下逐过程步进,不会进入子函数(类似VS里的F10)   <李>喂逐语句步进,会进入子函数(类似VS里的F11)   <李>直到运行至当前语句块结束李   <李>完成运行至函数结束并跳出,并打印函数的返回值(类似VS的Shift + F11)   
  


  

  

你可以定义你的断点是否在所有的线程上,或是在某个特定的线程.GDB很容易帮你完成这一工作。

  
      <李>打破& lt; linespec>李线程& lt; threadno>   <李>打破& lt; linespec>线程& lt; threadno>如果…   
  

linespec指定了断点设置在的源程序的行号.threadno指定了线程的ID,注意,这个ID是GDB分配的,你可以通过“信息线程”命令来查看正在运行程序中的线程信息。如果你不指定线程& lt; threadno>则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如:

        (gdb)打破frik。c: 13个线程28如果bartab比;lim      

当你的程序被GDB停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

linux中gdb的入门使用教程