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:

gdb暂停或恢复程序的运行的更多相关文章

  1. gdb常用命令及使用gdb调试多进程多线程程序

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  2. gdb常用命令及gdb调试多进程/线程程序&coredump

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  3. gdb调试多进程多线程程序

    一.调试的指令 1.list命令 list linenum 显示程序第linenum行的周围的程序 list function 显示程序名为function的函数的源程序 list 显示当前行后面的源 ...

  4. 利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)

    利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程, ...

  5. 更为复杂C程序的运行时结构

    运行环境 win 10 企业版 1809 17763.194,MinGW V3.14 32位,Bundled V3.13.2,Bundled GDB V8.2. 在C语言中,栈的方向是从高地址向低地址 ...

  6. Linux暂停和恢复进程

    Linux暂停和恢复进程 kill -STOP 1234 将该进程暂停. 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该 ...

  7. javascript 函数的暂停和恢复

    javascript 异步编程从来都是一个难题,最开始我们用 callback,但随之触发了回调地狱,于是"发明" Promise 解决 callback 嵌套过深的问题.然而由于 ...

  8. 使用 suspend 和 resume 暂停和恢复线程

    suspend 和 resume 的使用 在 Thread 类中有这样两个方法:suspend 和 resume,这两个方法是成对出现的. suspend() 方法的作用是将一个线程挂起(暂停), r ...

  9. Eclipse+CDT+GDB调试android NDK程序(转)

    Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...

随机推荐

  1. QtCreator集成的MSVC套件有问题

    MSVC编译出来的内部签名算法的程序,相同的代码,验签结果和MINGW编译出来的不一样.MINGW编译出来的结果是正确的 怀疑是因为QtCreator集成的msvc有问题,可能是编码问题,可能是其他问 ...

  2. 【locust】使用locust + boomer实现对接口的压测

    背景 很早之前,考虑单机执行能力,使用locust做过公司短信网关的压测工作,后来发现了一个golang版本的locust,性能是python版本的5到10倍以上,但是一直没有机会使用. 最近公司想做 ...

  3. 走进JavaWeb技术世界4:Servlet 工作原理详解

    从本篇开始,正式进入Java核心技术内容的学习,首先介绍的就是Java web应用的核心规范servlet 转自:https://www.ibm.com/developerworks/cn/java/ ...

  4. Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 转自https://www.javadoop.com/post/hashmap#toc7 部分内容转自 http: ...

  5. Jquery.Data()和HTML标签的data-*属性

    Jquery.Data()和HTML标签的data-*属性 一.总结 一句话总结: 在页面中用到要用标签存数据还是用HTML标签的data-*属性,这样 不会破坏html本身的结构 1.使用HTML标 ...

  6. iTerm 2打造ssh完美连接Linux服务器快捷方法

    iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发   版权声明:本文为博主原创文章,遵 ...

  7. springboot之activemq安装与实践

    环境:腾讯云centos7 注意:activemq安装插件,可能会报错.本人是主机名的问题,所以修改了主机名. vim /etc/hosts vim /etc/hostname 修改这两个文件,并重启 ...

  8. sql控制流if()、case when then

    tb_user: 1.if (expr1,expr2,expr3) #如果expr1成立,则返回expr2,否则返回expr3示例:select  name, if (sex=1,'男','女')  ...

  9. vps虚拟机df -h根分区100%

    前言:今天上午接到一个网友的求助,说是服务器的根分区满了.但是,找不到具体的大文件在哪里.由于故障确实很古怪,我就要来了故障服务器的相关账户密码. 故障服务器相关环境: 系统:Centos 6.5 s ...

  10. unity三维地球模型生成

    准备一张贴图   创建材质球 球面坐标系转直角坐标系 x=rsinθcosφ. y=rsinθsinφ. z=rcosθ. 效果如下   脚本如下 using System.Collections; ...