linux中gdb的运用,Linux编程基本——GDB(设置断点)


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

断点

  在代码的指定地位中缀,使顺序在此中缀。

  • break <function>    在进入指定函数时愣住
  • break <linenum>    在指定行号愣住。
  • break /-offset    在以后行号的前面或背面的offset行愣住。offiset为自然数。
  • break filename:linenum    在源文件filename的linenum行处愣住。
  • break ... if <condition>    ...可所以上述的参数,condition透露表现前提,在前提成立时愣住。比如在循状况体中,可以或许设置break if i=100,透露表现当i为100时愣住顺序。

  案例:

(gdb) break sc_smartcontract_handler.cpp:45
Breakpoint 4 at 0x424d42: file sc_smartcontract_handler.cpp, line 45.

  对断点的相干操纵

  • delete    删除一切断点
  • delete breakpoint [n]    删除某个断点
  • disable breakpoint [n]    禁用某个断点
  • enable breakpoint [n]    使能某个断点
  • info breakpoints  [n] 检察以后断点信息

视察点

   捕获点用来补捉顺序运转时的一些事宜。如:载入同享库(动态链接库)、C 的非常等。一般也是用来定位bug。

   捕获点的敕令花样是:catch <event>,event可所以下面的内容

  • watch <expr>    变量发生变化时中缀
  • rwatch <expr>    变量被读时中缀
  • awatch <expr>     变量值被读或被写时中缀

 可以或许经由历程info watchpoints [n]敕令检察以后视察点信息

检察变量

 最经常运用的检察变量的要领是

  (gdb) print {变量名}

(gdb) print argc
$1 = 1

 若是打印数组,因为默许的设置,可以或许打印的数组尾部局部没有显现,可以或许经由历程以下的敕令设置打印数组的最大长度

  (gdb) set print elements 300

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

调试中检察代码

  • list function   如list main:显现main函数左近的代码
  • list file:function   如list main.c:main:显现main.c中的main函数左近的代码
  • list n1,n2   如list 10,20,显现以后文件的10到20行

虽然list已很轻易了, 但照样不尽人意. 若是可以或许在运转的同时显现代码就好了, 谜底是一定的.

运用以下敕令启动gdb: gdb -tui 项目名 或许在启动gdb后, 输入敕令focus,如图:

规复顺序运转和单步调试

在gdb中,和调试步进相干的敕令主要有以下几条:

  • continue    继承运转顺序直到下一个断点(相似于VS里的F5)
  • next        逐历程步进,不会进入子函数(相似VS里的F10)
  • setp        逐语句步进,会进入子函数(相似VS里的F11)
  • until        运转至以后语句块完毕
  • finish    运转至函数完毕并跳出,并打印函数的返回值(相似VS的Shift F11)

在特定线程中中缀

你可以或许界说你的断点是不是在一切的线程上,或是在某个特定的线程。GDB很轻易帮你完成这一事情。

  • break <linespec> thread <threadno>
  • break <linespec> thread <threadno> if ...

linespec指定了断点设置在的源顺序的行号。threadno指定了线程的ID,注重,这个ID是GDB分派的,你可以或许经由历程"info threads"敕令来检察正在运转顺序中的线程信息。若是你不指定thread <threadno>则透露表现你的断点设在一切线程上面。你还可以或许为某线程指定断点前提。如:

     (gdb) break frik.c:13 thread 28 if bartab > lim

当你的顺序被GDB愣住时,一切的运转线程都会被愣住。这轻易你你检察运转顺序的整体状况。而在你规复顺序运转时,一切的线程也会被规复运转。那怕是主历程在被单步调试时。

 

参考博客

Linux编程基本——GDB(设置断点)

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。