为什么我在调试Ruby C扩展时在gdb中获得SIGTRAP?

时间:2009-08-13 01:47:02

标签: c ruby

我想使用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)

为什么会这样?我怎么能阻止它发生?

1 个答案:

答案 0 :(得分:1)

SIGTRAP是由断点异常引起的,特别是x86上的int3指令(中断3)。您的代码可能正在执行int3。看看gdb告诉你的地方 - utils.c功能is_a_hash()第65行。如果您无权访问源代码,则至少可以通过键入

从gdb获取反汇编
disas try_hash

在gdb提示符下。