如何在不导致速度减慢的情况下忽略并继续通过GDB中的SIGTRAP?

时间:2017-05-18 12:44:36

标签: c gdb signals

我在C可执行文件中遇到GDB接收SIGTRAP并停止的情况。

我尝试了以下命令,其中排序有效:

handle SIGTRAP nostop noprint noignore

这会导致GDB垃圾邮件:

"Can't send signals to this remote system. SIGTRAP not sent."

虽然这看起来像是一个错误,但它似乎对代码本身没有任何影响;它会一直持续到下一个断点,但遗憾的是这种情况非常缓慢。

有谁知道如何让它默默地这样做?我知道命令有一个无声的选项,但我不知道如何将它与handle命令结合起来。

1 个答案:

答案 0 :(得分:1)

问题是关于是否处理,忽略或传递信号的选择总是在GDB中完成。交付SIGTRAP后,您的远程目标将停止,并通知GDB由于SIGTRAP而停止。

正如你告诉gdb通过SIGTRAP然后gdb尝试将SIGTRAP作为continue命令的一部分发送回远程目标,但是,似乎你的gdbserver不接受信号,这就是消息来自,此时gdb再次尝试恢复远程目标,但这次没有信号。

因此,您所做的是正确的,并且应该有效,但是,您使用的gdbserver似乎不支持使用信号恢复,请参阅C和{{1}这里的数据包https://sourceware.org/gdb/onlinedocs/gdb/Packets.html#Packets

并且......虽然您的程序在打印警告的情况下可能看起来运行正常,但我认为正在传递的SIGTRAP应该触发某些行为(上下文切换或其他),那么,'不会发生,因为信号不会到达你的测试程序。