一、core分析
1、檢視命令:
ulimit -c
啟動命令:
ulimit -c ulimited
檢視core檔案:
gdb -c core.*** a.out
2、生成core檔案的路徑在檔案/etc/sysctl.conf中
cat /etc/sysctl.conf
sysctl.conf檔案中科院設定的格式符號**。。。
3、啟動整個系統的核心轉儲功能
二、gdb除錯
1、使用gdb除錯的檔案需要使用-g編譯
(1)使用makefile編譯,加-g
(2)使用configure,./configure cflags = "-wall -o2 -g"
2、gdb除錯
(1)啟動:gdb a.out
(2)設定斷點: break或者b
break 函式名
break 行號
break 檔名:行號
break 檔名:函式名
break +偏移量
break -偏移量
break *位址
通過info break(info b)檢視斷點情況
3、顯示幀棧:backtrace或者bt(別名:info stack, info s, where)
顯示所有幀棧:bt
顯示開頭n個幀棧: bt n
顯示最後n個幀棧: bt full n
4、顯示變數: print 變數名(或者p 變數名)
5、顯示暫存器:info registers(或者info reg)
6、單步執行:next(n) ,進入函式內部執行step(p),逐條執行彙編指令:nexti stepi
7、繼續執行:continue(c)
8、監視點:watch 變數,當發生變化時暫停(awatch被訪問和改變時暫停,rwatch被訪問是暫停)
9、刪除斷點和監視點:delete n (d n)
10、改變變數的值:set variable 《變數》=《表示式》
11、除錯多程序方法
(1)先用ps -a | grep *** 檢視程序***的程序id,然後attach到程序: attach 程序id,attach 之後就能使用普通的gdb命令,需要將gdb和程序分離時使用detach,程序detach之後會繼續執行。
(2)使用偵錯程式選項follow-fork-mode
gdb偵錯程式的選項follow-fork-mode允許我們選擇程式在執行fork系統呼叫後是繼續除錯父程序還是除錯子程序。
其用法如下: set follow-fork-mode mode (mode可選parent或child,分別表示除錯父程序和子程序)
12、條件斷點:break 斷點 if 條件
13、刪除禁用斷點:clear 檔名:行號
delete 斷點編號
disable 斷點編號
enable 斷點編號
14、斷點命令:commands 斷點編號
命令end
15、除錯多執行緒方法
(1)檢視程序執行緒:i thr
切換到相應的執行緒:thr 123
(2)set scheduler-locking[off|on|step]
除錯多執行緒程式時,預設除了被除錯的執行緒在執行外,其他執行緒也在繼續執行,但有的時候我們希望只讓被除錯的執行緒執行。這可以通過這個命令來實現。 該命令設定sceduler-locking的值:
off表示不鎖定任何執行緒,即所有執行緒都可以繼續執行,這是預設值。
on表示只有當前被除錯的執行緒會繼續執行。
step表示在單步執行的時候,只有當前執行緒會執行。
GDB 除錯總結
啟動 gdb gdb 然後 gdb file 執行 gdb run 該程式本身的命令列引數 檢視 gdb list 簡寫為 gdb l 技巧 gdb list 1,20 檢視1到 20行的 使用斷點 建立斷點 gdb break 可以簡寫為 gdb b gdb b 這種是為還沒有開啟的源 設定斷點 ...
gdb除錯總結
gdb是linux環境下最強大的除錯工具,可以除錯未執行的程式或者正在執行的程式,還可以分析程式崩潰的coredump檔案,這些的前提是,程式在編譯時新增了 g選項開啟了除錯資訊。使用方法 gdb program 對於有引數的,可以通過gdb內執行 set args param 來設定引數,或者gd...
GDB 基礎除錯總結
gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。基礎除錯命令 命令 解釋 示例 file 檔名 載入被除錯的可執行程式檔案。因為一般都在被除錯程式所在目錄下執行gdb,因而文字名不需要帶路徑。gdb file gdb sample rrun...