我想知道是否有一种方法可以不依赖FreeBSD或Linux的核心转储而获得崩溃进程的回溯。
通常,为了获得正在运行的进程的回溯,我们在FreeBSD上运行bstack PID_OF_PROCESS
,在Linux上运行pstack PID_OF_PROCESS
。
但是一旦进程崩溃,我们就需要依赖核心文件来获取回溯信息,并且如果我们要执行bstack或pstack,我们也没有PID。
是否有类似内核API的方法或某种方法来获取崩溃进程的回溯信息,而无需在核心文件上执行gdb?
如果需要提供有关该查询的其他信息,请告诉我。
答案 0 :(得分:1)
您可以在gdb下运行您的应用程序,并创建一些宏,例如在循环中执行“ where”和“ step”命令。在SIGSEGV之后,该宏/脚本将停止,然后您应该能够看到程序的回溯。当然,可能要花费很多时间才能发现问题所在。
您还可以修改内核以显示用户空间应用程序的整个回溯,但是它需要一些内核API知识。
也许valgrind也可以用于这种调查?
还请阅读有关-fstack-protector的man gcc。
顺便说一句-为什么不使用核心转储文件?