gdb 除錯多執行緒

2021-08-18 11:34:57 字數 1101 閱讀 5229

如果目標程序已經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...