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