Como obtenho o backtrace para todos os threads no GDB?

151

Existe um comando equivalente no GDB ao comando "! Process 0 7" do WinDbg?

Eu quero extrair todos os threads em um arquivo de despejo, juntamente com seus backtraces no GDB. "info threads" não gera os rastreamentos da pilha. Então, existe um comando que faz?

srikantha ks
fonte
13
O comando correspondente para o LLDB ébt all - caso alguém o encontre pelo Google (que pensa GDB == LLDB).
Kennytm 26/10/16
Com python, o seguinte funciona "(gdb) python para thread em gdb.selected_inferior (). Threads (): thread.switch (); print (thread.num); gdb.execute ('where')"
Talespin_Kit em

Respostas:

244

Geralmente, o backtrace é usado para obter a pilha do encadeamento atual, mas se for necessário obter o rastreamento da pilha de todos os encadeamentos, use o seguinte comando.

thread apply all bt
Sharad
fonte
12
Para salvar a saída em um arquivo:gdb <binary> <coredump> -ex "thread apply all bt" -ex "quit" > output.log
Dia do juízo
1
Você pode encurtar isso parat a a bt
qbolec
59

Existe um comando que faz?

thread apply all where
Russo empregado
fonte
4
Um sinônimo para backtrace.
Daniel Farrell