http://simohayha.iteye.com/blog/493091

gdb可以监测在你的程序中的任何信号。

主要靠的命令是:

handle signal [keywords...]

这里的keywords可以有以下内容:

1 nostop gdb接收到信号不会停止程序,而只是打印出一段message

2 stop 和上面类似只不过会停止程序。

3 print 当信号发生必须打印一条消息通知。

4 noprint 信号发生,gdb将不会打印任何东西。

5 pass和noignore 这两个是同义的。表示信号对你的程序是可见的。

6 nopass和ignore 这两个也是同义的。和上面相反。。

线程模式,

set scheduler-locking on|off|step

默认为off,也就是所有的线程都一起走。

set schedule-multiple mode

这个是针对进程的线程,如果为on,那么所有进程的线程都能够执行。

none-stop模式。

顾名思义,当程序在gdb中停止,只有当前的线程会被停止,而其他的线程将会继续运行。 
这个时候step,next这些命令就只对当前的线程起作用。

我们要打开这个模式需要这样操作:

# Enable the async interface.
set target-async
# If using the CLI, pagination breaks non-stop.
set pagination off
# Finally, turn it on!
set non-stop on

在all-stop模式中interrupt将会停止所有的线程。而在none-stop中只会停止当前线程。interrupt -a此时就能停止所有线程。’

当你有多个线程,你此时只想给某个线程设置断点,这个时候可以用这个命令:

break linespec thread threadno 
break linespec thread threadno if ...

linespec为源码行号,threadno为线程id。

gdb与信号的更多相关文章

  1. gdb中信号

    信号(Signals) 信号是一种软中断,是一种处理异步事件的方法.一般来说,操作系统都支持许多信号.尤其是UNIX,比较重要应用程序一般都会处理信号.UNIX定义了许 多信号,比如SIGINT表示中 ...

  2. 使用pstack和gdb调试死锁

    1:代码 下面是一个简单的能够发生死锁的代码: #include <unistd.h> #include <pthread.h> #include <string.h&g ...

  3. 自动kill慢查询

    在生产环境中,DB服务器经常会被并发的慢查询压挂,因此事前进行sql审核避免烂SQL很重要.万一不小心慢sql还是跑到线上,并且并发还不小,这是dba肯定会收到告警.dba上线处理第一时间是定位并ki ...

  4. 【LINUX】编程笔记

      a storage class can only be specified for objects and functions extern修饰一个struct报错,错误原因如上,C++中存储类修 ...

  5. Android(工具・集成)

    ■ NDK Android从始(2009)至终是支持JNI的. 只不过一开始没有NDK.需要自己安装交叉编译器创建so,然后放到assert之类捆绑so发布. 有了NDK.有了什么? libc lib ...

  6. 【转贴】gdb中的信号(signal)相关调试技巧

    一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛  http://www.magicunix.com/index_ch.html  http://www.m ...

  7. gdb(ddd,kdevelop等)调试ZeroIce开发的应用程序,中断信号引起的问题

    不作文,只记要点. 1.Ice::Application的程序框架默认对SIGHUP, SIGINT, SIGTERM进行处理.目的就是捕捉Ctrl+C发出信号有序地结束程序.这个功能扰乱了我们使用g ...

  8. gdb调试时忽略SIGPIPE 等信号

    GDB调试网络程序时,会遇到SIGPIPE信息,默认GDB会把程序停下来,即使程序使用signal(SIGPIPE, SIG_IGN);来忽略信号.用handle命令设置一下缺省的signal的处理行 ...

  9. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

随机推荐

  1. STM32 的 printf() 函数串口重定向(HAL库标准库都适用)

    1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm3 ...

  2. java中 flush()方法的作用

    flush() 是清空,而不是刷新啊.一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还 ...

  3. UVA 1329 Corporative Network【并查集】

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  4. 非典型的scala程序及其编译后的结果

    初学Scala Folder structure以及部分代码 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xldmVyd3lx/font/5a6L5L ...

  5. PCA(Principal Components Analysis)主成分分析

    全是图片..新手伤不起.word弄的,结果csdn传不了..以后改. .

  6. po层和vo层中po和vo是什么意思

    POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. pojo 是Plain Old Java Ob ...

  7. 剪切具有CornerRadius的RectangleGeometry(可能在Ripple中用到)

    剪切具有CornerRadius的RectangleGeometry(可能在Ripple中用到) 1.新建Converter public class BorderClipConverter : IM ...

  8. ES transport client底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync或者await(future超时机制)来实现类似同步调用!因此,ES transport client可以同步调用也可以异步(不过底层的socket必然是异步实现)

    ES transport client底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync或者await(future超时机制)来实现类似同步调用! 因此,ES tra ...

  9. 性能监控之监控SQL语句

    分析表 analyze table tablename compute statistics for all indexes; analyze table tablename compute stat ...

  10. CentOS7安装第三方yum源EPEL

    转自:https://blog.csdn.net/u012208775/article/details/78784616 一.简介 EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fe ...