如何获取GDB中所有线程的回溯?

sri*_* ks 128 debugging multithreading gdb backtrace

在GDB中是否有与Windbg的"!process 0 7"相同的命令?

我想提取转储文件中的所有线程以及它们在GDB中的回溯."info threads"不输出堆栈跟踪.那么,有没有命令呢?

小智 217

通常,回溯用于给出当前线程的堆栈,但如果有必要给出所有线程的堆栈跟踪,请使用以下命令

线程适用于所有bt

  • 要将输出保存到文件:`gdb <binary> <coredump> -ex"thread apply all bt"-ex"quit"> output.log` (11认同)
  • 您可以将其缩短为“taa bt” (5认同)
  • @Doomsday 评论中的命令对我来说挂起。最好尝试使用 `gdb &lt;binary&gt; &lt;coredump&gt; -ex "thread apply all bt" -ex "detach" -ex "quit" &gt; output.log`,以避免 gdb 出现阻止命令等待输入的问题。 (3认同)

Emp*_*ian 51

有没有命令呢?

thread apply all where
Run Code Online (Sandbox Code Playgroud)

  • backtrace的同义词。 (3认同)

div*_*ery 21

当使用多个线程进行调试时,切换到特定线程号并仅获取该线程的回溯也很有用。

来自 GNU GDB 线程文档

出于调试目的,GDB 将其自己的线程号(按线程创建顺序分配的一个小整数)与程序中的每个线程相关联。

用法:

info threads
Run Code Online (Sandbox Code Playgroud)

然后确定您要查看的线程。

thread <thread_id>
Run Code Online (Sandbox Code Playgroud)

最后,仅对该线程使用回溯:

bt
Run Code Online (Sandbox Code Playgroud)