1、信号 Signals:
信号是一种软中断,应用程序一般都会处理信号,如程序异常退出等会发出信号。
UNIX下的部分信号:
SIGINT | 表示中断字符信号,也就是Ctrl+C的信号 |
---|---|
SIGBUS | 表示硬件故障的信号 |
SIGCHLD | 表示子进程状态改变信号 |
SIGKILL | 表示终止程序运行的信号 |
2、GDB中处理信号:
GDB调试器可以自动捕获C、C++程序中出现的信号,并根据事先约定好的方式处理它,默认收到任何信号都会停住正在运行的程序,以供你进行调试。
2.1、控制GDB收到信号的处理方式:
handle <signal> <keywords…>:配置收到指定信号的处理方式
<keywords>可以是以下几种关键字的一个或多个:
nostop | 当信号发生时,GDB不会停住程序的运行,但会打出消息告诉你收到这种信号 |
---|---|
stop | 当信号发生时,GDB会暂停程序执行 |
当信号发生时,GDB会打印出必要的提示信息 | |
noprint | 当信号发生时,GDB不会打印出任何提示信息 |
nopass/ignore | GDB捕获目标信号的同时,不允许程序自行处理该信号 |
pass/noignore | GDB调试在捕获目标信号的同时,也允许程序自动处理该信号 |
2.2、信号处理常用命令:
handle SIG32 noprint nostop | 遇到SIG32不停止不打印,从而不影响GDB过程 |
---|---|
info signals | 查看GDB可以处理的信号种类,以及各个信号的具体处理方式 |
info handle | 查看有哪些信号在被GDB检测中 |
3、用法:
1、使用handle SIG32 noprint nostop忽略系统信号,让GDB只停在我们自己的断点处。
参考资料:GDB handle命令:信号处理