2

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

attach <PID>
call rb_backtrace()

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

4

1 回答 1

0

我不知道 ruby​​ 端的答案——我猜它会进入 ruby​​ 进程的 stdout 或 stderr——但 gdb 最近有一个新功能,旨在帮助解决这种情况。

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

有关更多信息,请从此处开始并阅读接下来的几个节点:http: //sourceware.org/gdb/current/onlinedocs/gdb/Frame-Filter-API.html#Frame-Filter-API

我希望看到这个功能被各种解释器项目采用。漂亮印刷的采用已经相当不错了,我认为这是合乎逻辑的下一步。

于 2013-07-31T01:45:37.223 回答