Как мне получить трассировку для всех потоков в GDB?

Есть ли в GDB команда, эквивалентная команде WinDbg !process 0 7?

Я хочу извлечь все потоки в файл дампа вместе с их следами в GDB. info threads не выводит трассировку стека. Итак, есть ли команда, которая работает?


person srikantha ks    schedule 22.08.2013    source источник
comment
Соответствующая команда для LLDB - bt all - на случай, если кто-то нашел это через Google (кто думает GDB == LLDB).   -  person kennytm    schedule 26.10.2016
comment
С python работает (gdb) python для потока в gdb.selected_inferior (). Threads (): thread.switch (); print (thread.num); gdb.execute ('где')   -  person Talespin_Kit    schedule 08.04.2020
comment
@kennytm, этого достаточно, чтобы задать вопрос ИМО   -  person Bruno Alexandre Rosa    schedule 03.06.2021
comment
Фактически, я создал точный вопрос: stackoverflow.com/questions/67820406/   -  person Bruno Alexandre Rosa    schedule 03.06.2021


Ответы (3)


Обычно обратная трассировка используется для получения стека текущего потока, но если есть необходимость получить трассировку стека всех потоков, используйте следующую команду.

thread apply all bt
person Sharad    schedule 10.04.2014
comment
Чтобы сохранить вывод в файл: gdb <binary> <coredump> -ex "thread apply all bt" -ex "quit" > output.log - person Doomsday; 28.03.2018
comment
Вы можете сократить это до t a a bt - person qbolec; 13.03.2020
comment
У меня зависает команда в комментарии @Doomsday. Лучше попробуйте с gdb <binary> <coredump> -ex "thread apply all bt" -ex "detach" -ex "quit" > output.log, чтобы избежать вопроса от gdb, который блокирует команду, ожидающую ввода. - person Mariano Paniga; 12.08.2020

Есть ли какая-нибудь команда?

thread apply all where
person Employed Russian    schedule 22.08.2013
comment
Синоним backtrace. - person Daniel Farrell; 28.11.2017
comment
Только что попробовал, это не синоним backtrace. - person Vipin; 01.05.2021

При отладке с несколькими потоками также полезно переключиться на конкретный номер потока и получить трассировку только для этого потока.

Из потоков GNU GDB документация

Для целей отладки GDB связывает свой собственный номер потока - небольшое целое число, назначенное в порядке создания потока - с каждым потоком в вашей программе.

Использование:

info threads

Затем определите нить, которую вы хотите посмотреть.

thread <thread_id>

Наконец, используйте обратную трассировку только для этого потока:

bt
person diviquery    schedule 18.05.2021