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