linux gdb 除錯多執行緒

2021-10-03 11:20:30 字數 1187 閱讀 1161

1 用 kill 命令產生 core dump檔案:

kill -11 pid

用訊號11殺掉它,會讓程序產生乙個 segmentation fault,從而產生乙個 core dump,得到乙個 core 檔案,裡面包含了死鎖的時候,程序的記憶體映象。

其中訊號11表示: sigse**sigse**是當乙個程序執行了乙個無效的記憶體引用,或發生段錯誤時傳送給它的訊號

可以使用kill -l來列出所有訊號名稱

試圖訪問未分配給自己的記憶體, 或試圖往沒有寫許可權的記憶體位址寫資料.

2 gdb 開啟這個 core 檔案,然後

意思是讓所有的執行緒執行bt

如果執行緒太多不方便檢視想寫在檔案裡,可以:

(gdb)set logging file 《檔名》

(gdb)set logging on

(gdb)set logging off

(gdb)quit

3info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。 前面有*的是當前除錯的執行緒。 

thread id切換當前除錯的執行緒為指定id的執行緒。 

4 呼叫gcore命令為指定的程序生成core 檔案,但是又可以讓程式不退出,一般比如程式「卡住了」可以嘗試使用

1. 用命令 'gdb'。(假設需要除錯的程序號為 21509)

2. 使用 『attach 21590』命令將gdb附加到程序21509上。

3. 使用『gcore core_name』命令生成coredump檔案core_name。

4. 使用『detach』命令斷開連線。

5.使用『q』命令退出gdb。

ps:比較常用的一些訊號值

sighup 1 a 終端掛起或者控制程序終止

sigint 2 a 鍵盤中斷(如break鍵被按下)

sigquit 3 c 鍵盤的退出鍵被按下

sigill 4 c 非法指令

sigabrt 6 c 由abort(3)發出的退出指令

sigfpe 8 c 浮點異常

sigkill 9 aef kill訊號

sigse** 11 c 無效的記憶體引用

還有pstack strace參看

linux gdb 除錯多執行緒

最近遇到乙個問題,乙個程序裡啟用了多執行緒,然後乙個執行緒掛掉了,產生了coredump檔案,但是gdb無法跟蹤到是哪乙個執行緒,沒辦法只能重新跑一邊,gdb當前程序,加入斷點,看運 況,步驟如下 1 top 檢視正在執行的程式 2 啟動gdb,attach 需要除錯的程序pid 或者知道程序的名字...

Linux gdb除錯多執行緒

我們這裡仍舊將gdb的基本操作在這裡羅列一下 list l 行號 顯示源 一次顯示10行 list l 函式名 列出某個函式的源 r或run 執行程式 s或step 進入函式呼叫 breaktrace bt 檢視函式呼叫棧 info i locals 檢視當前棧幀區域性變數的值 info break...

linux gdb 除錯多執行緒 單獨除錯執行緒

linux gdb 除錯多執行緒 單獨除錯執行緒 2011年01月26日 星期三 下午 06 10 一 多執行緒除錯 多執行緒除錯可能是問得最多的。其實,重要就是下面幾個命令 info thread 檢視當前程序的執行緒。thread 切換除錯的執行緒為指定id的執行緒。break file.c 1...