GDB中是否有与WinDbg的!process 0 7
相当的命令?
我想在GDB中提取转储文件中的所有线程以及它们的回溯信息。 info threads
没有输出堆栈跟踪信息。所以,是否有一条命令可以做到这一点?
GDB中是否有与WinDbg的!process 0 7
相当的命令?
我想在GDB中提取转储文件中的所有线程以及它们的回溯信息。 info threads
没有输出堆栈跟踪信息。所以,是否有一条命令可以做到这一点?
一般情况下,回溯用于获取当前线程的堆栈信息,但如果需要获取所有线程的堆栈跟踪信息,则使用以下命令。
thread apply all bt
gdb <binary> <coredump> -ex "thread apply all bt" -ex "quit" > output.log
- Doomsdaygdb <binary> <coredump> -ex "thread apply all bt" -ex "detach" -ex "quit" > output.log
,以避免gdb弹出等待输入的问题阻塞命令。 - Mariano Panigathread apply [threadno] [all] args
,其中 [threadno]
也可以是空格分隔的线程标识符列表(例如 2 3 4
),或者是一个范围(例如 2-6
)。 - nnunes--batch
或@MarianoPaniga。 - Stephane Chazelas有没有一个命令可以做到这一点?
thread apply all where
info gdb where
:名称'where'和'info stack'(缩写为'info s')是'backtrace'的其他别名。 - Stephane Chazelas在使用多个线程进行调试时,将GDB切换到特定的线程号,并且仅获取该线程的回溯信息也是很有用的。
详见GNU GDB 文档
GDB为您程序中的每个线程关联了自己的线程数--一个小整数按照线程创建顺序分配。
使用方法:
info threads
然后找出您想查看的线程。
thread <thread_id>
最后,仅针对该线程使用回溯(backtrace):
bt
如果您的进程正在运行:
pstack $pid
bt all
—— 以防有人通过谷歌发现这个(以为 GDB == LLDB)。 - kennytm