Как увидеть трассировку стека для определенного потока в зависшем процессе в Linux

У меня есть многопоточный процесс, который застрял во время работы под Linux. Но у меня нет многопоточной версии для pstack (сделал псевдоним с gstack). В качестве таких, gstack <pid> не дает мне ничего. Как я могу (а) прикрепить gdb к уже запущенному процессу (b) получить трассировку стека отдельных потоков (c) узнать нити потоков работающего процесса (d) из threadid (если известен), как я могу увидеть трассировку стека / стек вызовов для запущенного потока в зависшем процессе?

1 ответ

Решение

Сначала скомпилируйте его с параметрами -O0 -ggdb для лучшей отладки.

Если вы можете запустить под GDB, просто запустите

   # gdb ./yourbinary

И просто подожди проблему. Когда процесс застрянет, просто нажмите ^C и ты в.

Если вы не можете запустить под GDB, просто:

   # gdb --pid=<YOUR PID>

В обоих случаях введите info threads и вы увидите все свои темы. Затем выберите один, и вы можете увидеть bt или что-нибудь еще.

Другие вопросы по тегам