gdb入門例項2——斷點除錯例項
阿新 • • 發佈:2018-12-08
測試程式碼
#include <stdio.h>
int main (int argc, char *argv[]) {
int sum = 0, i = 0;
char input[5];
while (1) {
scanf("%s", input);
for (i = 0; input[i] != '\0'; ++i)
sum = sum * 10 + input[i] - '0';
printf("input = %d\n", sum);
}
return 0;
}
測試過程
程式的作用是首先從鍵盤讀入一串數字儲存到char陣列中,然後通過input[i] - '0’轉換為整型存到sum中
例如輸入“123”,會得到整數123
1)編譯執行
可以看到,第一次的時候結果還是對的,為什麼第二次發生了錯誤呢?
我們也已經為sum給了初始值0了呀,為什麼會出現這樣的錯誤呢?
可以使用display
命令使得每次停下來的時候都顯示當前sum的值
如果不想跟蹤顯示了,可以使用undisplay
命令,變數sum的編號是1,可以使用undisplay 1
命令來取消它的跟蹤顯示
可以看到,sum已經賦了初始值,並不是sum的問題
2)斷點除錯
首先我們在運算處設定一個斷點,
然後使用continue
命令讓程式連續執行而非單步執行,可以看到,已經到斷點處停止,然後使用命令next
完成賦值
繼續執行程式,發現123是能正確得到的,當我們輸入456時,發現此時sum的值已經是123了,而不是從0開始
那麼,這個時候,我們就發現了問題所在,原來是在下一次迴圈的時候,sum的值沒有從0開始
於是我們用set
命令來設定當前變數的值為0,繼續執行程式
這個時候,你發現,sum的值是4了,是不是好像對了呢?繼續執行
好的,程式執行成功了,說明要每次迴圈的開始都要將sum置為0才可以
Tips:檢視、禁用、啟用、刪除斷點
檢視斷點:
info breakpoints
禁用斷點:disable breakpoints
啟用斷點:enable 編號
刪除斷點:delete breakpoints