前言

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,如图:

linux中gdb的入门使用教程

恢复程序运行和单步调试

在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使用,linux中gdb命令,linux中gdb

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com

评论“linux中gdb的入门使用教程”

暂无“linux中gdb的入门使用教程”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。