2009-08-13 31 views
0

我想使用rb_p()来帮助调试ruby C扩展,但每次我使用它,我都会在gdb中获得一个SIGTRAP!为什么我在调试Ruby C扩展时在gdb中获取SIGTRAP?

这里是一个例子:

(GDB)p user_defaults

$ 3 = 137559900

(GDB)调用rb_p(user_defaults)

{:补=>真,:纹理= >#}

(gdb)n

编程接收信号SIGTRAP,跟踪/断点陷阱。 utils.c处的is_a_hash(try_hash = 137560420):65 (gdb)

为什么会发生这种情况?我怎么能阻止它发生?

回答

1

SIGTRAP是由断点异常引起的,具体是由x86(中断3)上的int3指令引起的。您的代码可能正在执行int3。看看GDB告诉你 - 在utils.c行65在is_a_hash()函数。如果您无法访问源代码,您至少可以通过在gdb提示符处输入

disas try_hash 

来从gdb反汇编。

+0

这个异常究竟意味着什么?它的目的是什么?你猜测为什么代码正在执行该指令吗? – horseyguy 2009-08-13 02:11:48

相关问题