ref : https://blog.csdn.net/seu_lyr/article/details/9050657

 

一 暂停程序的运行:

(一)GDB的暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行,使用continue或c命令。

*GDB中的停止点:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)。

 

(二)设置断点:用break命令设置断点。

*break <function>:在进入指定函数时停住。C++可以使用class::function或function(type,type)(重载)格式来指定函数名。

*break filename:function:在源文件filename的function函数入口处停住。

*break<linenum>:在指定行号停住。

*break filename:linenum:在文件filename的linenum行处停住。

*break +offset和break -offset:在当前行的前或后offset行停住。

 

*break *address:在程序运行时内存地址address处停住。

 

*break:没有参数时,表示在下一条指令处停住。

*break ... if<condition>:...可以是上述参数,condition表示条件,在条件成立时停住。例如:break linenum if i==5.

 

*查看断点:info break [n]或info breakpoint [n]。n表示断点号,[]表示可选,没有n则显示全部断点。

 

(三)设置观察点(硬件观察点和软件观察点)watch:用来观察某个表达式(包括变量)的值是否变化,如果变化,则马上停止程序。

*watch <expr>:为表达式expr设置一个观察点,一旦表达式的值有变化,马上停止程序。

*rwatch <expr>:expr被读时,停止程序。

*awatch <expr>:当表达式expr的值被读或被写时,停住程序。

*info watchpoints:显示当前设置的所有观察点。

 

(四)捕捉点:捕捉程序运行时的一些事件。如:载入共享库或是C++异常。

1.格式:catch <events>

*当event发生时,停住程序。

*twach<events>:只设置一次捕捉点,当程序停住以后,捕捉点被删除。

2.events:



(五) 维护停止点:

1.clear:


2.delete:


3.disable:gdb不删除,需要时再enable即可。


4.enable:


 

(六)维护停止条件:

1.condition <bnum> <expression>:修改断点号为bnum的停止条件为expression。

*condition <expression>:清楚断点为bnum的停止条件。


2.ignore <bnum> <count>:忽略断点为bnum的停止条件count次。


 

(七) 为停止点设定运行命令:

(1)利用commands命令设置停止点的运行命令,当程序被停止时,可以让其自动运行一些别的命令(有利于自动化测试)。

(2)格式:

commands [bnum]

... command-list ...

end

(3)help commands:


(4)例如:

/*在断点1处打印i的值,并继续运行程序*/

commands 1

print i

continue

end

 

(八) 断点菜单:

(1)在C++中可能有函数重载,这种情况下break<function>不能告诉gdb要停在哪个函数的入口。可以用break
<function(type)>指定哪个函数,否则gdb会列出一个断点菜单供你选择,这时只需输入菜单列表的编号即可。

 

(九) 信号(signals):

(1)信号是一种软终端,一种处理异步事件的方法。GDB有能力在你调试程序时处理任何一种信号,可以告诉GDB需要处理哪一种信号。要求GDB在收到你所指定的信号时,马上停住正在运行的程序,供你调试,利用handle命令完成。

(2)handle命令:格式:handle <signal> <actions>,参数见help handle。


 

(十)线程停止(thread stops):

(1)如果程序是多线程程序可以定义断点在所有线程上还是在特定线程上。

(2)格式:break <linespec> thread <threadno>或break <linespec> thread <threadno> if ...

*linespec指定断点设置的源程序的行号。threadno指定线程的ID,注意这个ID是GDB分配的,可通过info threads来查看正在运行程序的线程信息。如果不指定thread <threadno>就将断点设置在所有线程上。

 

 

二 恢复程序的运行:

(1)continue:当程序被停住,可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来。


 

(2)next、step、until和finish:

最新文章

  1. “static”引发的一个错误
  2. 在ANSYS WORKBENCH中使用APDL命令的例子
  3. 夺命雷公狗---node.js---11之文件上传
  4. mongodb的高级操作(聚合框架)
  5. HeadFirst设计模式读书笔记--目录
  6. Linux-进程描述(5)之进程环境
  7. 51NOD 1376 最长递增子序列的数量 [CDQ分治]
  8. (NO.00005)iOS实现炸弹人游戏(六):游戏数据的初始化(三)
  9. redis与CPU、内存
  10. 老婆大人 split,slice,splice,replace的用法
  11. Your password does not satisfy the current policy requirements问题解决方法
  12. windown 下最简单的安装mysql方式
  13. WebApi服务以及跨域设置
  14. Linux小脚本
  15. 利用Oracle GoldenGate记录源系统所有表的操作
  16. HDU6113
  17. Laravel5.4 Oauth2.0认证应用 API 实战!
  18. eclipse3.4配置的tomcat server如何部署以前的web项目?
  19. oracle卸载清除注册表(彻底卸载)
  20. 完全用nosql轻松打造千万级数据量的微博系统

热门文章

  1. Python学习日记(三)——Python基本数据类型(运算符、int、str、tuple、dict、range)
  2. jvm方法栈
  3. spring boot 原理解析一(spring boot 基础特征)
  4. Linux 操作memcache命令行
  5. 使用.NET Framework开发IIS 7.0模块和处理程序拦截请求实现跳转
  6. PHP判断访问者是PC端还是移动端
  7. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_24-页面预览-页面预览测试
  8. 轻量级通用上采样算子-CARAFE
  9. Vue打包文件放在服务器后,浏览器存在缓存问题
  10. 如何调试JS查看异常信息