崩溃进程的回溯,而无需依赖于特定于操作系统的核心转储

时间:2018-10-16 06:35:24

标签: linux linux-kernel core freebsd backtrace

我想知道是否有一种方法可以不依赖FreeBSD或Linux的核心转储而获得崩溃进程的回溯。 通常,为了获得正在运行的进程的回溯,我们在FreeBSD上运行bstack PID_OF_PROCESS,在Linux上运行pstack PID_OF_PROCESS

但是一旦进程崩溃,我们就需要依赖核心文件来获取回溯信息,并且如果我们要执行bstack或pstack,我们也没有PID。

是否有类似内核API的方法或某种方法来获取崩溃进程的回溯信息,而无需在核心文件上执行gdb?

如果需要提供有关该查询的其他信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以在gdb下运行您的应用程序,并创建一些宏,例如在循环中执行“ where”和“ step”命令。在SIGSEGV之后,该宏/脚本将停止,然后您应该能够看到程序的回溯。当然,可能要花费很多时间才能发现问题所在。

您还可以修改内核以显示用户空间应用程序的整个回溯,但是它需要一些内核API知识。

也许valgrind也可以用于这种调查?

还请阅读有关-fstack-protector的man gcc。

顺便说一句-为什么不使用核心转储文件?