我想使用rb_p()来帮助调试ruby C扩展,但每次使用它我都会在gdb中获得一个SIGTRAP!
这是一个例子:
(gdb)p user_defaults
$ 3 = 137559900
(gdb)调用rb_p(user_defaults)
{:fill => true,:texture =>#}
(gdb)n
编程接收信号SIGTRAP,跟踪/断点陷阱。 utils.c:65的is_a_hash(try_hash = 137560420) (gdb)
为什么会这样?我怎么能阻止它发生?
答案 0 :(得分:1)
SIGTRAP是由断点异常引起的,特别是x86上的int3
指令(中断3)。您的代码可能正在执行int3
。看看gdb告诉你的地方 - utils.c
功能is_a_hash()
第65行。如果您无权访问源代码,则至少可以通过键入
disas try_hash
在gdb提示符下。