gdb除錯學習筆記

2021-07-10 04:46:59 字數 2094 閱讀 8283

【監視點】 watch (m>25) (只有遍歷所在的記憶體值發生變化,且滿足條件是中斷)

【列印變數】 print j

【幫助文件】 help breakpoint 產看斷點幫助文件

【編譯時-g選項】 如果不加同樣能夠除錯,不過不可以檢視變數和行號

注意是編譯過程使用,在鏈結過程沒沒有用

【tui介面】 ctrl+x+a 切換介面

【掛起正在執行的程式】 ctrl+c(如果要繼續同樣是continue)

【條件斷點】 condition 1 num==5 (注意這裡的1是斷點編號,通過info b檢視)

上行是將普通斷點1加上條件,如果要去掉條件:condition 1 即可

break 30 if num==5 (注意這個是break將第30行直接設為條件斷點)

【段錯誤】 陣列越界或使用錯誤的指標

【啟動檔案】 gdb -command=z filename

表示除錯filename可執行檔案之前先從z檔案中讀取命令

可以將除錯資訊儲存在源檔案目錄下的.gdbinit檔案中(即z檔案)

【臨時斷點】 tbreak 10

【取消確認詢問】 set confirm off

【禁用/啟用斷點】 disable/enable (注意:enable once 和 tbreak 區別)

【結束當前棧幀】 finish (注意:無視斷點,直到當前函式返回到呼叫處)

【until】 until 是執行程式,直到記憶體位址比當前位址更高的機器指令

【斷點命令列表】 command 1 (1為斷點編號)

silent (為了安靜的輸出)

printf 「num is %d\n」 n

continue (一行接著一行的輸出,直到迴圈結束)

end

【call命令】 command 2

printf 「call the print function」

call printtree(root);

(注意:這裡直接呼叫原始檔中有但沒有在此處呼叫的函式

並傳入實參進行呼叫!)

end

【檢視陣列】 靜態陣列(棧):p arr

動態陣列(堆):p *arr@num (num為陣列元素個數)

【顯示變數結構】 ptype node

【設定變數】 set num=1

set args 1 2 (設定輸入引數分別為1和2,下次run時使用)

【多執行緒除錯】 info threads (顯示所有執行緒)

thread num (切換執行緒)

bt (顯示棧幀)

break 35 thread 3 if x==y (執行緒3在第25行中斷)

【並行程式設計一:訊息】 訊息由於要讀記憶體,所以一般是網路上使用,

(方法:mpi,示例-p136) 其實socket就是訊息。

【並行程式設計二:共享記憶體】 其實執行緒通訊使用的全域性變數(在資料段)和程序間通訊

(方法:openmp,示例-p2143) 使用共享記憶體是乙個道理,所以真正的共享記憶體環境中,

通常都是用多執行緒進行開發的!

【附加gdb除錯】 對於乙個已經在執行的程式,我們通過ps ax命令檢視到之後,

可以直接使用: gdb+程序名+pid 的方式進行除錯

而且退出gdb也不會是該程序退出!

【core檔案】 程式發生段錯誤時,如果不能找到具體位置,可以使用core檔案。

1.ulimit -a(或ulimit -c)檢視core檔案大小,預設為0,不能寫core檔案

2.ulimit -c unlimited 進行修改

3.編譯時使用-g選項

4.無論是直接執行還是除錯執行都可以將堆疊呼叫情況儲存到core檔案中

(但我現在的server程式在通過gdb除錯時就無法生成core檔案?)

5.core檔案預設儲存到可執行檔案路徑下,名為core.***x

6.通過gdb ./a.out core.***x 對core檔案進行除錯

7.where命令檢視崩潰位置,bt檢視堆疊,frame檢視棧幀等。

gdb除錯學習

一般來說,gdb主要幫忙你完成下面四個方面的功能 1 啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。2 可讓被除錯的程式在你所指定的調置的斷點處停住。斷點可以是條件表示式 3 當程式被停住時,可以檢查此時你的程式中所發生的事。4 動態的改變你程式的執行環境。除錯的程式如下 root lo...

gdb除錯學習

gdb是乙個由gnu開源組織發布的,unix linux作業系統下的,基於命令列,功能強大的程式除錯工具。可以用來除錯c,c 程式。在今天驗收實驗時發生特別尷尬的事情,由於在編譯.c檔案的時候沒有加 g選項,所以一直無法用gdb除錯程式,所以在總結gdb之前先來看看gcc在編譯時的引數。a.常規選項...

gdb 除錯學習

gdb 是unix linux 系統下的程式除錯工具,和ide 如vs,eclipse等 的圖形化除錯工具相比,gdb在斷點,跟蹤顯示方面有著不足,但是它在某些方面比圖形化除錯工具更加豐富的功能。gdb 除錯前提 如果希望程式能夠被gdb除錯,則需要在編譯程式時候,指定 g 選項。gdb 的除錯和程...