首先先介紹多執行緒除錯的基本命令:
1.info threads,顯示當前可除錯的所有執行緒。每個執行緒會有gdb為其分配的id,後面的操作會用到這個id。前面帶'*'號的是當前正在除錯的執行緒。
2.thread id,切換當前除錯的執行緒為指定id的執行緒。
3.break threa鎖定d_test.c:123 thread all
,在所有執行緒中相應的行上設定斷點
6.set scheduler-locking [off|on|step]
值得注意的是,在使用step或者continue命令除錯當前被除錯執行緒的時候,其他執行緒也是同時執行的,怎麼只讓被除錯程式執行呢?通過這個命令就可以實現這個需求。
off:不鎖定任何執行緒,也就是所有執行緒都執行,這是預設值。
on:只有當前被除錯程式會執行。
step:在單步的時候,除了next過乙個函式的情況(熟悉情況的人可能知道,這其實是乙個設定斷點然後continue的行為)以外,只有當前執行緒會執行。
7.show scheduler-locking,檢視當前鎖定執行緒的模式。
介紹完gdb除錯多執行緒的基本命令,下面就讓我們以乙個簡單的栗子來使用並熟悉這些命令吧!
[cpp]
view plain
copy
#include
#include
void
*pthread1_run(
void
*arg)
pthread_exit(null);
return
0;
} void
*pthread2_run(
void
*arg)
pthread_exit(null);
return
0;
} int
main()
makefile
testtid:testtid.c
gcc -o $@ $^ -lpthread -g //-g是說明要使用gdb除錯該**,-lpthread是與執行緒有關函式編譯鏈結的時候必須新增的
.phony:clean
clean:
rm -f testtid
1.檢視當前正在除錯的執行緒並切換執行緒
前面的1,2,3是gdb分配的執行緒號,當切換執行緒的時候使用該執行緒號。最前面的'*'號說明當前正在除錯的執行緒。
2.讓所有被除錯的執行緒都執行同乙個命令,就是列印堆疊資訊
3.只讓執行緒編號為1的執行緒列印堆疊資訊
4.鎖定執行緒並檢視當前鎖定的執行緒
在這裡就分享結束了~~~~
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...