GDB除錯總結

2021-07-24 13:30:38 字數 1834 閱讀 9148

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