Как увидеть трассировку стека для определенного потока в зависшем процессе в 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
или что-нибудь еще.