gdb中信号

信号(Signals)

信号是一种软中断,是一种处理异步事件的方法。通常来讲,操做系统都支持许多信号。尤为是UNIX,比较重要应用程序通常都会处理信号。UNIX定义了许 多信号,好比SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号; SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下很是重要的一种技术。

GDB有能力在你调试程序的时候处理任何一种信号,你能够告诉GDB须要处理哪种信号。你能够要求GDB收到你所指定的信号时,立刻停住正在运行的程序,以供你进行调试。你能够用GDB的handle命令来完成这一功能。

handle
在GDB中定义一个信号处理。信号能够以SIG开头或不以 SIG开头,能够用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIGKILL的信号,其中包括SIGIO, SIGIOT,SIGKILL三个信号),也可使用关键字all来标明要处理全部的信号。一旦被调试的程序接收到信号,运行程序立刻会被GDB停住,以 供调试。其能够是如下几种关键字的一个或多个。

nostop
当被调试的程序收到信号时,GDB不会停住程序的运行,但会打出消息告诉你收到这种信号。
stop
当被调试的程序收到信号时,GDB会停住你的程序。
print
当被调试的程序收到信号时,GDB会显示出一条信息。
noprint
当被调试的程序收到信号时,GDB不会告诉你收到信号的信息。
pass
noignore
当被调试的程序收到信号时,GDB不处理信号。这表示,GDB会把这个信号交给被调试程序会处理。
nopass
ignore
当被调试的程序收到信号时,GDB不会让被调试程序来处理这个信号。


info signals
info handle
查看有哪些信号在被GDB检测中。
 

信号的处理
程序是和网络相关的,调试期间常常地收到SIGPIPE,致使gdb停下来。看了一下gdb info,解决方法很简单。用handle命令设置一下缺省signal的处理行为就能够了:
   handle SIGPIPE nostop
若是连提示信息都不想看见,就能够这样设置:
   handle SIGPIPE nostop noprint
就能够了。其余相关信号也能够相似处理。想了解目前的signal状态可使用info signal察看。编程

 

写了一个INT信号的处理函数,在处理函数里设置断点后go,可是在console下按Ctrl-C后MC并无进入处理函数,而console下的程序也直接退出,没有给出但愿的输出。网络

    --------------------------------------------------------------------------------异步

    在console下按Ctrl-C后确实发送了SIGINT信号,可是gdb里的缺省设置将会致使由GDB截获的该信息,调试的应用程序没法接受到该信号。函数

    有两种方法可使调试的应用程序接受到信号:ui

    (1)改变gdb信号处理的设置操作系统

    好比,如下设置会告诉gdb在接收到SIGINT时不要中止、打印出来、传递给调试目标程序debug

    =====================================调试

    (gdb) handle SIGINT nostop print passcode

    SIGINT is used by the debugger.进程

    Are you sure you want to change it? (y or n) y

    Signal Stop Print Pass to program Description

    SIGINT No Yes Yes Interrupt

    (gdb)

    =====================================

    (2)使用gdb命令直接向调试的应用程序发送信号

    首先在你但愿发送信号的语句处设置断点,而后运行程序,当中止到断点所在位置后,用gdb的signal命令发送信号给调试目标程序

    ====================================

    (gdb) signal SIGINT

    Continuing with signal SIGINT.

    Breakpoint 1, handler (signal=2) at main.cpp:15

    15 printf("Signal handler...\n"

    

相关文章
相关标签/搜索