如何在 Linux x64 上以侵入性和影响最小的方式跨已运行进程的所有线程获取堆栈跟踪?
到目前为止我想到的事情:
- gdb - 恐怕它会太慢而且太久;
- strace+ - 不知道它有什么性能,有经验吗?尽管如此,IIUC,它只跟踪系统调用,我什至不能指望每个线程都进入一个系统调用,特别是一些线程可能已经挂起;
- 强制崩溃并获取核心转储- 是的......如果我能轻松做到这一点,我可能已经忙于调试......请,让我们假设房间里没有大象,为了这个问题,好吗?.. . 漂亮请...
如何在 Linux x64 上以侵入性和影响最小的方式跨已运行进程的所有线程获取堆栈跟踪?
到目前为止我想到的事情:
gcore
附带一个实用程序gdb
。您无需强制崩溃即可获得核心转储。
这正是 pstack 所做的。见http://www.linuxcommand.org/man_pages/pstack1.html