如何使用GDB除錯多執行緒

2021-08-02 21:13:58 字數 852 閱讀 4240

先寫一段多執行緒程式。 

加上 -g引數生成可調式資訊, 可以進行除錯。 

pthread不是linux下的預設的庫,也就是在鏈結的時候,無法找到phread庫中哥函式的入口位址,於是鏈結會失敗。在gcc編譯的時候,附加要加 -lpthread引數即可解決。

在使用step或continue命令除錯當前被除錯執行緒的時候,其他執行緒也是同時執行的,如果我們只想要被除錯的執行緒執行,而其他執行緒停止等待,那就要鎖定要除錯的執行緒,只讓它執行。

off:不鎖定任何執行緒,所有執行緒都執行。

on:只有當前被除錯的執行緒會執行。

step:阻止其他執行緒在當前執行緒單步除錯的時候搶占當前執行緒。只有當next、continue、util以及finish的時候,其他執行緒才會獲得重新執行的。 

show scheduler-locking: 

這條命令是為了檢視當前鎖定執行緒的模式。

如何使用GDB除錯多執行緒

先寫一段多執行緒程式。加上 g引數生成可調式資訊,可以進行除錯。pthread不是linux下的預設的庫,也就是在鏈結的時候,無法找到phread庫中哥函式的入口位址,於是鏈結會失敗。在gcc編譯的時候,附加要加 lpthread引數即可解決。在使用step或continue命令除錯當前被除錯執行緒...

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,多為段錯誤,一般都涉及記憶體非法讀寫。可以這樣處理,使用下面的命令開啟系統開...