有没有办法在不附加 GDB 的情况下打印所有线程的堆栈跟踪?
或者是否有一个命令可以用作 gdb 批处理模式来打印所有线程的堆栈跟踪?
原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法在不附加 GDB 的情况下打印所有线程的堆栈跟踪?
或者是否有一个命令可以用作 gdb 批处理模式来打印所有线程的堆栈跟踪?
原文由 Vivek Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议
elfutils 在其他实用程序中包括 eu-stack
:
> eu-stack > Print a stack for each thread in a process or core file. > > ``` 它比 gdb 或 pstack 快,后者只是 gdb 的一个 shell 脚本包装器。要打印堆栈跟踪运行 `eu-stack` 如下:
$ eu-stack -p 2209 PID 2209 - process TID 2209: #0 0x00007f53476b667b __poll #1 0x00007f5348f98e99 g_main_context_iterate.isra.23 #2 0x00007f5348f99232 g_main_loop_run #3 0x000055e604b1e56a main #4 0x00007f53475cc00a __libc_start_main #5 0x000055e604b1e76a _start TID 2223: #0 0x00007f53476b667b __poll #1 0x00007f5348f98e99 g_main_context_iterate.isra.23 #2 0x00007f5348f98fac g_main_context_iteration #3 0x00007f5348f98ff1 glib_worker_main #4 0x00007f5348fc0486 g_thread_proxy #5 0x00007f534813761b start_thread #6 0x00007f53476c2c2f __clone TID 2224: #0 0x00007f53476b667b __poll #1 0x00007f5348f98e99 g_main_context_iterate.isra.23 #2 0x00007f5348f99232 g_main_loop_run #3 0x00007f5349581b56 gdbus_shared_thread_func #4 0x00007f5348fc0486 g_thread_proxy #5 0x00007f534813761b start_thread #6 0x00007f53476c2c2f __clone
”`
原文由 ks1322 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
GDB中有一个
thread apply all
命令:遗憾的是,GDB 似乎无法从管道读取命令,因此要以批处理模式运行命令,必须使用临时文件:
然后你只会“暂时”附加
gdb
然后分离。