signal
当被调试的进程进入running状态后,terminal由该进程控制,因此不会出现gdb提示符,这时如何和gdb交互呢(比如想添加一个断点)?必须停止该进程,使控制权回到gdb:
- 如果设置有断点,可以触发断点
- 向gdb发送signal。最简单的方法就是用intr(Ctrl-C)字符产生SIGINT,因为gdb对SIGINT的处理是停止进程,不把该signal传递给进程,可以用info handle来查看当前gdb对signals的处理情况,如:
Signal Stop Print Pass to program Description SIGHUP Yes Yes Yes Hangup SIGINT Yes Yes No Interrupt SIGQUIT Yes Yes Yes Quit
Stop列表示是否停止进程,Print表示是否打印该signal,Pass to program列表示是否把该signal传给调试的进程
当gdb收到一个signal而停止进程后,传递signal到进程的动作还没有发生,此时可以用handle命令修改对signal的处理方式,当继续执行进程使才会根据当前的设置决定是否把该signal传给进程。