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