重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
接著學習一下使用VS進行簡單的代碼調試。非常簡單,都是操作性的東西。
在學完c++以后我會繼續(xù)講解調試原理,并和大家一起打造一款自己的調試器。
首先新建一個工程,并在項目屬性里面關閉SDL檢查:(參考上一篇) 日后正常開發(fā)中還是要打開,用VS的安全函數(shù)比較好,由于我們的目的在于復習C語言,所以為了不必要的麻煩先關掉。
然后我們構造一個函數(shù)Debug,函數(shù)的參數(shù)為一個數(shù)組,功能為遍歷打印數(shù)組的十個元素,然后我們傳入一個只有容量為5的數(shù)組,引發(fā)一個數(shù)組越界,并進行調試。
代碼如下:
#include
#include
void Debug(int );
int main()
{
int arrDebug[5] = { 0,1,2,3,4 };
Debug(arrDebug);
system("pause");
return 0;
}
void Debug(intpNum) {
for (int i = 0; i < 10; i++) {
printf("%d\n", pNum[i]);
}
}
現(xiàn)在運行該程序,如果你和我一樣,是在一個解決方案里創(chuàng)建了多個項目:
那你運行后會開始執(zhí)行第一個創(chuàng)建的項目,因為VS默認停留在首項目,所以我們右鍵要執(zhí)行的項目,將其設置為啟動項目:
好,現(xiàn)在執(zhí)行該項目,得到一下結果:
很明顯,一定是出了問題,在本程序中我們可以很容易就發(fā)現(xiàn)問題所在,但是隨著代碼復雜程度的增加,我們不可能靠這種人肉方式來調BUG,因此需要借助調試器。
首先定位Bug,通常可以根據(jù)程序的一些輸入來定位,或者在錯誤輸出處回溯。如果是語法錯誤,程序會自己斷下,然后再回溯。
定位到可疑函數(shù)后,在該函數(shù)處下斷點(雙擊該行左側即可):
然后運行該程序,程序斷到斷點處:
此時,可以單步步入,單步步過,和執(zhí)行
首先試一下單步步過,F(xiàn)10,程序執(zhí)行到該斷點的下一行,
再單步步過,執(zhí)行完畢,可見單步步過功能,在遇到函數(shù)時不會進入函數(shù)體內,而是執(zhí)行該函數(shù)的下一行代碼。
再次運行項目,程序斷下后單步步入,F(xiàn)11:
進入到函數(shù)體內,此刻我們可以打開內存窗口來查看內存中的數(shù)據(jù):
在內存窗口的地址欄,輸入變量名稱后回車,(更好的方法是選中變量名稱,直接拖到內存窗口):
便可得到該變量在內存中的數(shù)據(jù),觀察可得,只有五個成員。
然后我們繼續(xù)單步走:
就可以一步一步的觀察程序的執(zhí)行情況,從而找出問題所在。
如果不想調試了,可以按F5,讓程序自由執(zhí)行。
通常我們會在多個斷點中,F(xiàn)5,F(xiàn)10,F(xiàn)10,配合使用調試程序。
也可以直接在函數(shù)體內下斷:
然后再運行程序,程序會在斷點處斷下。
好了,再操作一遍熟練熟練吧,雖然是操作性東西沒有什么好理解的,但是學習編程的首要任務就是要學會調試…. 不然根本無法寫程序。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。