1. 程式人生 > >gdb除錯基本方法-----斷點

gdb除錯基本方法-----斷點

編譯程式

在進行程式編譯時新增 -g 選項
例:

gcc -g -Wall -o test -test.c

斷點

  1. list 檢視程式碼
    list可簡寫為 l
    使用方法:

    • list [檔名]:[行號]
    • list [函式名]
      命令執行後,會顯示行號附近的程式碼
  2. break 設定斷點
    break可簡寫為 b
    使用方法:

    • break [檔名] :[行號]
    • break [行號]
    • break if 條件
      比如有時我們在迴圈處需要迴圈多少次後停下就用第三條命令,
      for(i = 0;i < 10; ++i) {
      	a++;
      }
      
      break if i==4這條命令執行後,當迴圈到第5次,滿足條件i == 4時程式停住。
      在設定斷點後可通過continue命令繼續執行程式,程式會在所設斷點處停住,contiune可簡寫為 c
      這裡需要注意的是在使用第2種方法時, 會將斷點設定在目前所在的檔案裡,例如現在有1.c和2.c兩個檔案,上一條命令是操作2.c檔案,那麼本次的斷點會預設設定在2.c檔案裡。
  3. info 檢視斷點
    使用方法:

    • info b 或者 info break
      執行命令後會顯示所有的斷點號和各個斷點所在的行號
  4. delete 刪除斷點
    使用方法:

    • delete [斷點號]
      斷點號可以是單個斷點號,也可以是序列。例如 delete 1-10,這將刪除序號在區間1~10內的所有斷點。
  5. nextstep
    這兩條命令用來單步除錯程式,

    • next :程式向後執行一步,若為子函式則不進入子函式內部;
    • step :程式向後執行一步,若目前程式指標指向子函式則進入子函式;
  6. print
    當程式執行起來後遇到故障或者斷點停住,或者單步除錯時,可通過print命令來檢視變數的值。

    int fun(void)
    {
    	int i, a = 1, b = 2, c = 3;
    	int array[10] = {0};
    	
    	a++;
    	b++;
    	c++;
    	
    	for(i = 0;i < 10; ++i) {
    		array[i] = i;
    	}
    	
    	return 0;
    }
    

使用方法:
print b可以檢視變數b的值。**print array[3]**便可以檢視陣列第四個元素的值。


在斷點這一部分中還有很多其他命令,比如設定觀察點等等,我目前也在學習。平常除錯這些基本夠用了。