我如何打印Ruby 1.9进程的运行时堆栈跟踪?

有没有办法打印Ruby 1.9.x进程的运行时堆栈跟踪? 我知道有一个名为pstack的实用程序,用于Ruby 1.8,但该项目几年前似乎已被放弃:https://github.com/ice799/pstack。 Ruby 1.9有类似的东西吗? 非常感谢!

编辑:我有兴趣使用外部工具来生成堆栈跟踪(没有运行在与Ruby进程相同的内存空间)。

正如@mosch所指出的那样, Kernal#caller方法在正在运行的Ruby进程中工作。

您甚至可以构建对您的Ruby代码的支持,以捕获进程信号并打印堆栈跟踪:

Signal.trap("SIGTERM") { p caller }

参考:http://www.ruby-doc.org/core-1.9.3/Signal.html

我可以将此功能构建到我的代码中,但我更愿意使用更通用的外部解决方案。 谢谢。


无论何时调用Kernel方法caller ,都会将当前调用堆栈作为一个Array。


今天我想出了一个想法。 ice799的pstack利用gdb调用ruby内部函数来转储回溯。 但是,它不适用于1.9并需要补丁。 这并不方便。

幸运的是,我们已经热身这个强大的工具。 它可以将一个.so注入到正在运行的进程中,我们可以通过.so注入来添加所需的函数,pstack将完成所有其他操作。 当然,注入的.so需要与正在运行的红宝石核心二进制兼容,但我们现在可以认为这部分非常稳定。

链接地址: http://www.djcxy.com/p/10151.html

上一篇: How can I print the runtime stack trace of a Ruby 1.9 process?

下一篇: Any good community translation tools for Android?