如果目標程序已經core dump了,那麼 gdb -c core *** ***是對應的程式檔案。
如果目標程序還在執行,通常此時用於除錯執行緒死鎖的情況。有兩種方法
一是 gdb -p *** ***是該程序的程序id
或者用gcore ***先獲取對應程序的core,他會生成乙個core檔案 core.***
進入gdb後
(gdb) info threads
可以列出所有的執行緒,預設設為當前的執行緒前面有乙個*號
比如gdb) info thread
9 system thread 154262 priority:154 0xc00000000042f670:0 in __ksleep
+0x30 () from /usr/lib/hpux64/libc.so.1
4 system thread 153674 priority:168 0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.1
3 system thread 153673 priority:168 0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.1
2 system thread 153672 priority:154 0xc00000000042f670:0 in __ksleep
+0x30 () from /usr/lib/hpux64/libc.so.1
* 1 system thread 153671 priority:154 0xc000000000432ef0:0 in _read_sys
+0x30 () from /usr/lib/hpux64/libc.so.1
這是1個死鎖的例子,可以看到執行緒9 和執行緒2都停在 __ksleep上。
如果想看各個執行緒的詳細堆疊資訊,比如要看9的
gdb)thread 9
把當前執行緒設成9,然後就可以檢視相關資訊
比如gdb)bt
將列出棧的呼叫情況,以及對應源**中的位置,此時謹慎察看對應**,一般必有結果
gdb多執行緒除錯
先介紹一下gdb多執行緒除錯的基本命令。info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id切換當前除錯的執行緒為指定id的執行緒。break thread test.c 12...
gdb 除錯多執行緒
設定core環境 uname a 檢視機器引數 ulimit a 檢視預設引數 ulimit c 1024 設定core檔案大小為1024 ulimit c unlimit 設定core檔案大小為無限 多執行緒如果dump,多為段錯誤,一般都涉及記憶體非法讀寫。可以這樣處理,使用下面的命令開啟系統開...
gdb 多執行緒除錯
推薦閱讀 先介紹一下gdb多執行緒除錯的基本命令。info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id切換當前除錯的執行緒為指定id的執行緒。break thread test...