现象
通过gdb att $keepalived_pid发起对当前运行keepalived的调试;
在放行keepalived继续执行后,想通过Ctrl+C按键中断执行,观察下被调试程序的当前内部状态,
但是,在终端输入Ctrl+C后,导致keepalived被调试进程退出。
gdb无法对keepalived进行正常的调试交互!
结论先行
gdb与inferior process之间通过ptrace系统调用,以及对signal信号的拦截、传递进行调试交互过程- 由终端触发的
signal会首先被Kernel路由到inferior process,然后再被gdb截获 Linux Kernel针对inferior process信号存在特别的路由机制,会导致某些应用使用了特别信号捕获机制,例如,sigwait or signalfd,并处理了SIGINT信号,则不能被gdb正常调试
缘由
以前就了解到,如果被调试程序使用到类似sigwait特殊的信号捕捉机制,将会导致gdb调试程序遇到麻烦,特别是无法正常使用Ctrl+C</

最低0.47元/天 解锁文章
538

被折叠的 条评论
为什么被折叠?



