如何在gdb中为乘客进程输出rb_backtrace()

时间:2013-07-30 18:16:51

标签: ruby gdb

我正在尝试在gdb中转储乘客进程的回溯。我知道我应该执行

attach <PID>
call rb_backtrace()
启动gdb之后

,但是我无法弄清楚输出的去向,我查看了rails生产日志(设置为info),nginx登录/ var / logs / nginx但我找不到输出。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道ruby端的答案 - 我猜它会进入ruby进程'stdout或stderr - 但是gdb最近得到了一个旨在帮助解决这个问题的新功能。 / p>

新功能称为“帧过滤器”,它允许您通过编写检查劣质过程状态的简单Python脚本来更改堆栈跟踪的显示方式。例如,您可以编写一个理解Ruby解释器的脚本,然后让gdb的“bt”自动将解释(Ruby)帧与C帧交错。

有关详细信息,请从此处开始阅读以下几个节点:http://sourceware.org/gdb/current/onlinedocs/gdb/Frame-Filter-API.html#Frame-Filter-API

我希望各种翻译项目能够采用此功能。非常好的采用漂亮的打印,我认为这是合乎逻辑的下一步。