信號的處理
程序是和網絡相關的,調試期間常常地收到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"