我在C可执行文件中遇到GDB接收SIGTRAP并停止的情况。
我尝试了以下命令,其中排序有效:
handle SIGTRAP nostop noprint noignore
这会导致GDB垃圾邮件:
"Can't send signals to this remote system. SIGTRAP not sent."
虽然这看起来像是一个错误,但它似乎对代码本身没有任何影响;它会一直持续到下一个断点,但遗憾的是这种情况非常缓慢。
有谁知道如何让它默默地这样做?我知道命令有一个无声的选项,但我不知道如何将它与handle命令结合起来。
答案 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应该触发某些行为(上下文切换或其他),那么,'不会发生,因为信号不会到达你的测试程序。