我正在尝试调试在特定例程中触发不需要的SIGTRAP的程序 . 此信号在库中触发,但同一调用者始终显示在回溯中 . 如果调用者是[某种功能]而不是打破它,我怎么能告诉GDB忽略这个信号呢?
我试过使用 skip function [some function]
甚至 skip file [file that triggers SIGTRAP]
(来自5.3 Skipping Over Functions and Files),但是GDB仍然在那条线上破了 . 并且 continue
不会采取任何不需要修改调试程序的解决方案,包括GDB的Python脚本 . 如果相关,您还可以假设在触发SIGTRAP之前将错误写入 stderr
.
两年前,有人问我怎样才能让GDB在断点时停在SIGTRAP?这没有得到任何答案,所以我希望问题的弱点(忽略一些特定的SIGTRAP)是可以回答的 .
1 回答
您可以在源(问题的触发器)或事件发生后解决问题(请参阅this answer忽略某些SIGTRAP) . 下面我将解释如何处理第一种情况(避免触发) .
如果您有以下代码:
然后你可以设置一个断点,用命令立即返回:
如果由于代码混合而无法返回:
然后你可以使用
jump
命令跳过一行 . 假设int3
行是1337,请使用:如果东西在一行上(
asm("int3"); print_error();
,则更改行跳转以递增程序计数器(set $pc++
) . 这假定指令是一个字节 .