1. 程式人生 > >gdb入門例項2——斷點除錯例項

gdb入門例項2——斷點除錯例項

測試程式碼

#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