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. JavaWeb_(SpringMVC框架)SpringMVC入门

    Spring MVC又叫SpringWebMVC是一个轻量级的基于请求响应的表现层框架.它是Spring框架的一部分.SpringMVC与Struts2都可以替代原始Servlet技术. Spring ...

  2. 通过xshell上传和下载文件

    参考:http://www.cnblogs.com/mingaixin/p/5588699.html

  3. SpringMVC返回Map类型转换成JSON失败

    错误信息:WARN DefaultHandlerExceptionResolver:380 - Failed to write HTTP message: org.springframework.ht ...

  4. js中两个感叹号的原理与用法分析

    在javascript中有时会看到有两个!!的用法 var foo; alert(!foo);//undifined情况下,一个感叹号返回的是true; alert(!goo);//null情况下,一 ...

  5. An error occurred while starting a transaction on the provider connection. See the inner exception for details.

    用EntityFramework循环操作数据时,报了如下错误 An error occurred while starting a transaction on the provider connec ...

  6. geth run

    geth --networkid 1201 --rpc --rpcapi eth,net,web3,personal,admin,miner --rpccorsdomain "*" ...

  7. 客户端配置代理服务实现yum上外网

    vi  /etc/profile http_proxy=http://172.20.188.193:3128/https_proxy=https://172.20.188.193:3128/expor ...

  8. 转贴:PLSQL中 commit 和 rollback 的区别

    PLSQL中 commit 和 rollback 的区别 原文链接:https://blog.csdn.net/jerrytomcat/article/details/82250915 一. comm ...

  9. C之数据类型

    java的数据类型 byte 1个字节 boolean 1个字节 short 2个字节 char 2个字节 int 4个字节 float 4个字节 long 8个字节 double 8个字节 c语言的 ...

  10. Build Telemetry for Distributed Services之OpenCensus:C#

    OpenCensus Easily collect telemetry like metrics and distributed traces from your services OpenCensu ...