您的位置:首页 > 其它

GDB调试中将信号发送给程序的方法

2016-12-04 00:32 519 查看
文章来源:http://blog.csdn.net/xzz_hust/article/details/8894836

在看CSAPP的chapter 8 Exceptional Control Flow时发现用GDB调试程序时程序无法接收到ctrl-c发送的终止信号, 上网查了一下, 原来是因为GDB默认会截获信号, 使调试程序无法接收到信号, 要使调试程序能够接收到信号有两种办法:

(1)改变gdb信号处理的设置 

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

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

(gdb) handle SIGINT nostop print pass 

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"); 

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

参考文章: 

http://bbs.csdn.net/topics/50456838

http://stackoverflow.com/questions/553956/debugging-a-segmentation-fault-when-i-do-ctrl-c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: