gdb對於多執行緒程式的除錯有如下的支援:
執行緒產生通知:在產生新的執行緒時, gdb會給出提示資訊
(gdb) r
starting program: /root/thread
[new thread 1073951360 (lwp 12900)]
[new thread 1082342592 (lwp 12907)]---以下三個為新產生的執行緒
[new thread 1090731072 (lwp 12908)]
[new thread 1099119552 (lwp 12909)]
檢視執行緒:使用info threads可以檢視執行的執行緒。
(gdb) info threads
4 thread 1099119552 (lwp 12940) 0xffffe002 in ?? ()
3 thread 1090731072 (lwp 12939) 0xffffe002 in ?? ()
2 thread 1082342592 (lwp 12938) 0xffffe002 in ?? ()
* 1 thread 1073951360 (lwp 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb)
注意,行首的藍色文字為gdb分配的執行緒號,對執行緒進行切換時,使用該該號碼,而不是上文標出的綠色數字。
另外,行首的紅色星號標識了當前活動的執行緒
切換執行緒:使用 thread threadnumber 進行切換,threadnumber 為上文提到的執行緒號。下例顯示將活動執行緒從 1 切換至 4。
(gdb) info threads
4 thread 1099119552 (lwp 12940) 0xffffe002 in ?? ()
3 thread 1090731072 (lwp 12939) 0xffffe002 in ?? ()
2 thread 1082342592 (lwp 12938) 0xffffe002 in ?? ()
* 1 thread 1073951360 (lwp 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb) thread 4
[switching to thread 4 (thread 1099119552 (lwp 12940))]#0 0xffffe002 in ?? ()
(gdb) info threads
* 4 thread 1099119552 (lwp 12940) 0xffffe002 in ?? ()
3 thread 1090731072 (lwp 12939) 0xffffe002 in ?? ()
2 thread 1082342592 (lwp 12938) 0xffffe002 in ?? ()
1 thread 1073951360 (lwp 12931) main (argc=1, argv=0xbfffda04) at thread.c:21
(gdb)
以上即為使用gdb提供的對多執行緒進行除錯的一些基本命令。另外,gdb也提供對執行緒的斷點設定以及對指定或所有執行緒發布命令的命令。
初次接觸gdb下多執行緒的除錯,往往會忽視gdb中活動執行緒的概念。一般來講,在使用gdb除錯的時候,只有乙個執行緒為活動執行緒,如果希望得到其他的執行緒的輸出結果,必須使用thread命令切換至指定的執行緒,才能對該執行緒進行除錯或觀察輸出結果。
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...