从FreeBSD的内核核心转储中提取用户空间线程堆栈
问题描述:
我想在FreeBSD上调试多进程解决方案。当系统/设备遇到类似情况的挂起时,我们通过'sysctl debug.panic = 1'强制内核转储。意图是在相同的时间点捕获所有进程的状态。但是,我是 无法查看用户空间应用程序的线程堆栈。使用'ps',我能够 列出所有用户空间进程/线程,但无法设置其堆栈帧并使用'bt'展开。从FreeBSD的内核核心转储中提取用户空间线程堆栈
是否有可能实现类似于我正在尝试执行的操作?我已经看到OpenVMS 调试器(IIRC甚至windbg)允许一个人窥探到用户空间线程。
答
在DDB“BT/U”将跟踪线程的堆栈的用户空间部分。见“人4 DDB”,即,与textdump结合可能是不够的。
如果你有工作是核心,事情变得更加复杂
在kgdb中,“info threads”会列出内核崩溃时正在运行的所有线程,然后“thread X”后跟“bt”会给你in-kernel部分线程堆栈
获取应用程序的userland部分将会更困难。最简单的方法可能是修改gcore应用程序,以便我t使用libkvm挖掘与给定进程关联的虚拟机结构,并基本上重建进程的核心转储。这是可能的,但我认为目前还没有现成的解决方案。
谢谢,让我通读它 – hackworks