0
我有一個在Linux下運行時遇到困難的多線程進程。但我沒有多線程版本pstack
(製作別名gstack
)。因此,gstack <pid>
不提供任何東西。 (a)將gdb
附加到已經運行的進程(b)獲取單個線程的堆棧跟蹤(c)從threadid(如果知道)知道正在運行的進程的線程(d)如何查看堆棧跟蹤/調用堆棧正在運行的線程在被卡住的進程中?如何在Linux中的掛起進程中查看特定線程的堆棧跟蹤
我有一個在Linux下運行時遇到困難的多線程進程。但我沒有多線程版本pstack
(製作別名gstack
)。因此,gstack <pid>
不提供任何東西。 (a)將gdb
附加到已經運行的進程(b)獲取單個線程的堆棧跟蹤(c)從threadid(如果知道)知道正在運行的進程的線程(d)如何查看堆棧跟蹤/調用堆棧正在運行的線程在被卡住的進程中?如何在Linux中的掛起進程中查看特定線程的堆棧跟蹤
首先,使用選項-O0 -ggdb
進行編譯以獲得最佳調試。
如果你能在gdb下運行,只需要運行
# gdb ./yourbinary
而只是等待的問題。當過程遇到問題,只要按^C
和你
如果你不能在gdb下運行,只是:
# gdb --pid=<YOUR PID>
在這兩種情況下,類型info threads
,你會看到所有的線程。然後選擇一個,你可以看到bt
或其他任何東西。
對於(a)至少,你讀過gdb的基本手冊頁嗎?對於其他人,您是否閱讀過GDB幫助頁面? – Sneftel