1. 程式人生 > >cpp學習(三)使用VS進行簡單調試

cpp學習(三)使用VS進行簡單調試

數據 再次 項目 多個項目 rdebug -o debug size 容量

接著學習一下使用VS進行簡單的代碼調試。非常簡單,都是操作性的東西。
在學完c++以後我會繼續講解調試原理,並和大家一起打造一款自己的調試器。
首先新建一個工程,並在項目屬性裏面關閉SDL檢查:(參考上一篇) 日後正常開發中還是要打開,用VS的安全函數比較好,由於我們的目的在於復習C語言,所以為了不必要的麻煩先關掉。
技術分享圖片

然後我們構造一個函數Debug,函數的參數為一個數組,功能為遍歷打印數組的十個元素,然後我們傳入一個只有容量為5的數組,引發一個數組越界,並進行調試。
代碼如下:
#include<stdio.h>
#include<Windows.h>
void Debug(int );

int main()
{
int arrDebug[5] = { 0,1,2,3,4 };
Debug(arrDebug);
system("pause");
return 0;
}
void Debug(int
pNum) {
for (int i = 0; i < 10; i++) {
printf("%d\n", pNum[i]);
}
}
現在運行該程序,如果你和我一樣,是在一個解決方案裏創建了多個項目:
技術分享圖片

那你運行後會開始執行第一個創建的項目,因為VS默認停留在首項目,所以我們右鍵要執行的項目,將其設置為啟動項目:
技術分享圖片

好,現在執行該項目,得到一下結果:
技術分享圖片

很明顯,一定是出了問題,在本程序中我們可以很容易就發現問題所在,但是隨著代碼復雜程度的增加,我們不可能靠這種人肉方式來調BUG,因此需要借助調試器。

首先定位Bug,通常可以根據程序的一些輸入來定位,或者在錯誤輸出處回溯。如果是語法錯誤,程序會自己斷下,然後再回溯。
定位到可疑函數後,在該函數處下斷點(雙擊該行左側即可):
技術分享圖片
然後運行該程序,程序斷到斷點處:
技術分享圖片

此時,可以單步步入,單步步過,和執行
首先試一下單步步過,F10,程序執行到該斷點的下一行,
技術分享圖片
再單步步過,執行完畢,可見單步步過功能,在遇到函數時不會進入函數體內,而是執行該函數的下一行代碼。
再次運行項目,程序斷下後單步步入,F11:
技術分享圖片
進入到函數體內,此刻我們可以打開內存窗口來查看內存中的數據:
技術分享圖片
在內存窗口的地址欄,輸入變量名稱後回車,(更好的方法是選中變量名稱,直接拖到內存窗口):
技術分享圖片
技術分享圖片

便可得到該變量在內存中的數據,觀察可得,只有五個成員。

然後我們繼續單步走:
技術分享圖片

就可以一步一步的觀察程序的執行情況,從而找出問題所在。
如果不想調試了,可以按F5,讓程序自由執行。
通常我們會在多個斷點中,F5,F10,F10,配合使用調試程序。
也可以直接在函數體內下斷:
技術分享圖片
然後再運行程序,程序會在斷點處斷下。

好了,再操作一遍熟練熟練吧,雖然是操作性東西沒有什麽好理解的,但是學習編程的首要任務就是要學會調試…. 不然根本無法寫程序。

cpp學習(三)使用VS進行簡單調試