gdb除錯多執行緒

2021-08-20 14:23:19 字數 1605 閱讀 3403

首先先介紹多執行緒除錯的基本命令:

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...