gdb除錯學習

2021-08-18 01:30:27 字數 2619 閱讀 3606

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

a.常規選項

1、沒有任何選項:gcc   helloworld.c

結果會在與helloworld.c相同的目錄下產生乙個a.out的可執行檔案。

2、-o選項,指定輸出檔名:gcc -o helloworld helloworld.c

-o意思是output即需要指定輸出的可執行檔案的名稱。這裡的名稱為helloworld。

3、-c選項,只編譯,不彙編連線:gcc -c helloworld.c

-c意思就是compile,產生乙個叫helloworld.o的目標檔案

4、-s選項,產生彙編原始檔:gcc -s helloworld.c

-s意思就是assemble,產生乙個叫helloworld.s的彙編原始檔

5、-e選項,預處理c原始檔:gcc -e helloworld.c

-e意思就是preprocess。輸出不是送到乙個檔案而是標準輸出。當然可以對它進行重定向:

gcc -e helloworld.c > helloworld.txt

b.優化選項

1、 -o選項,基本優化:gcc -o helloworld.c

-o意思就是optimize,產生乙個經過優化的叫作a.out的可執行檔案。也可以同時使用-o選項,以指定輸出檔名。如:

gcc -o -o test helloworld.c

即會產生乙個叫test的經過優化的可執行檔案。

2、-o2選項,最大優化:gcc -o2 helloworld.c

產生乙個經過最大優化的叫作a.out的可執行檔案。

c. 除錯選項

1、 -g選項,產生供gdb除錯用的可執行檔案:gcc -g helloworld.c

產生乙個叫作a.out的可執行檔案,大小明顯比只用-o選項編譯彙編連線後的檔案大。

2、-pg選項,產生供gprof剖析用的可執行檔案:gcc -pg helloworld.c

產生乙個叫作a.out的執行檔案,大小明顯比用-g選項後產生的檔案還大。

-g選項的作業是在可執行檔案中加入源**的資訊,比如可執行檔案中第幾條機器指令對應源**的第幾條機器指令對應源**的第幾行,但並不是把整個原始檔嵌入到可執行檔案中,所以在除錯時必須保證gdb能找到原始檔。(類似於vs裡的debug和release)

得到可執行檔案後,接下來就可以用gdb來進行除錯了。

1.list(l) 列出源**,接著上次的位置往下列,每次列十行,可以自己接上乙個list再回車繼續列出。

2.list+行號 這個命令我在其他一些資料裡是列出從第幾行開始的源**,但事實上我在使用時是顯示該行號作為中間值的十行。

3.break(b)+行號 在某一行設定普通斷點。

4.run(r) 執行除錯程式(如果程式中沒有設定斷點,則程式會一直執行到結束或者出現異常結束,如果設定斷點,則會在斷點處停止)

5.print(p)+變數名  檢視變數值

6.set var +變數名賦值 修改變數的值,或者使用print +變數名賦值修改變數的值

7.next(n) 執行下一行語句,單步除錯

8.continue(c) 繼續執行程式知道下乙個斷點或者程式結束

9.info(i) <> 顯示各類資訊,詳情檢視「help info」,例如info breakpoint 檢視所有斷點

10.clear 清空所有斷點資訊

11.quit(q) 退出gdb除錯環境

12.step(s) 執行下一行語句,如果有函式呼叫則進入到函式中

13.start 開始執行程式,停在main函式第一行語句前等待命令

14.backtrace(bt) 檢視各級函式呼叫及引數

總結:gdb除錯功能強大,而且對於ide來言,使用命令更為方便快捷,學會除錯的基本操作,有利於我們發現**中的錯誤,同時,更應該掌握的是除錯的思路和技巧,這需要我們在長期的實踐中不斷訓練。

gdb除錯學習

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

gdb 除錯學習

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

gdb除錯學習筆記

監視點 watch m 25 只有遍歷所在的記憶體值發生變化,且滿足條件是中斷 列印變數 print j 幫助文件 help breakpoint 產看斷點幫助文件 編譯時 g選項 如果不加同樣能夠除錯,不過不可以檢視變數和行號 注意是編譯過程使用,在鏈結過程沒沒有用 tui介面 ctrl x a ...