前言
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停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]