資源描述:
《C Free 5程序調(diào)試方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、CFree5.0程序的單步調(diào)試創(chuàng)建一份新的代碼文件可直接點擊“文件”下的白色圖標(biāo),或點擊“文件”選擇“新建”,或按快捷鍵“Ctrl+N”(CFree5.0默認(rèn)情況下新建的代碼文件為.cpp格式,可在“工具”、“環(huán)境選項”、“新建文件類型”中更改,C語言標(biāo)準(zhǔn)格式為.c格式)基于實例的C程序調(diào)試介紹一、查看變量的內(nèi)容#includeintmain(intargc,char*argv[]){inti;intsum;sum=0;for(i=1;i<=10;i++)sum=sum+i;p
2、rintf("sum=%d",sum);return0;}第一步,打開CFree5.0,輸入上面的代碼。第二步,把光標(biāo)移到“sum=0;”這一行,按F10它的作用是設(shè)一個斷點,程序運行到這里時,會停下來。也就是說,接下來,程序必須通過按F7鍵單步運行了。第三步:按F9(開始調(diào)試)我們發(fā)現(xiàn)有一箭頭停留在這句語句上,它指示程序停留的位置,而箭頭所在的語句(“sum=0;”)還沒有執(zhí)行。事實上,我們可以通過看一下內(nèi)存變量sum的內(nèi)容來驗證。方法是這樣的:打開“調(diào)試”下的“監(jiān)視”,或者按快捷鍵“Alt+
3、3”。在“監(jiān)視”的空白處點擊鼠標(biāo)右鍵,選擇“添加監(jiān)視”。輸入需要監(jiān)視的變量名,這里輸入為sum這時我們可以在監(jiān)視窗口中看到sum的內(nèi)容不為0,而是一個隨機(jī)的值。第四步,我們按一下F7(進(jìn)入),我們發(fā)現(xiàn)sum的內(nèi)容變?yōu)?了。這說明“sum=0;”這句語句被執(zhí)行了。我們還可以用同樣的方法看一下i的內(nèi)容。只需要鼠標(biāo)點第六步,一步一步地按F7,我們可以發(fā)現(xiàn)在單步執(zhí)行for循環(huán)語句的時候i和sum的內(nèi)容在不斷變化。當(dāng)退出循環(huán)時,我們發(fā)現(xiàn)i的內(nèi)容為11(因為變量i的內(nèi)容為11,i<=10這個條件不滿足,所以
4、程序退出循環(huán))。附帶提一下,當(dāng)程序已經(jīng)執(zhí)行了“sum=0;”這一句語句后,如果我們直接把光標(biāo)移到“printf("sum=%d",sum);”,然后按Ctrl+F8,我們可以直接把上面的for循環(huán)都執(zhí)行了,而不必一步一步地按F7。在實踐中,為了查找程序的邏輯錯誤,我們往往要單步運行該程序好幾遍。如果已經(jīng)通過單步調(diào)試驗證某一段語句(如一個for循環(huán)語句或者幾個用戶定義的函數(shù))正確了,我們就可以用Ctrl+F8跳過這段語句,直接運行到還未測試的語句。二、F7(進(jìn)入)和F8(跳過)的區(qū)別#includ
5、eintadd(intm,intn){ints;s=m+n;returns;}intmain(intargc,char*argv[]){inti=1;intj=2;intsum;sum=add(i,j);printf("sum=%d",sum);return0;}第一步,把光標(biāo)移到“sum=add(i,j);”,按F10設(shè)置斷點后按F9開始調(diào)試,此時“sum=add(i,j);”這句語句還沒有執(zhí)行。接下來,如果按F7,則程序單步執(zhí)行到intadd(intm,intn)的函數(shù)體,
6、此時箭頭停留的位置如下圖所示。如果按不按F7而按F8,則把intadd(intm,intn)內(nèi)的語句全部執(zhí)行了(也就是說程序不會單步運行到add函數(shù)的里面)此時箭頭停留的位置如下圖所示。也就是說,碰到函數(shù),F(xiàn)7會單步執(zhí)行函數(shù)體的每一句語句,而F8則把函數(shù)當(dāng)作一句普通的C語言語句來執(zhí)行。在調(diào)試程序的時候,我們可以這樣做:如果我們已經(jīng)通過測試發(fā)現(xiàn)某一個函數(shù)已經(jīng)正確,那么我們不必單步執(zhí)行函數(shù)體的每一句語句;否則,我們單步執(zhí)行函數(shù)體的每一句語句,監(jiān)視相關(guān)的變量的內(nèi)容,通過測試用例檢查一下問題出在那里。三
7、、關(guān)于一重指針我們知道,一個指針是一個變量的地址,是一個常量。存放一個變量的地址的變量是指針變量。例如:“inta=1;intm;int*p;p=&a;”說明p是一個指針變量,它的內(nèi)容為整型變量a的地址。*p就是p所指向的變量a。指針變量p指向整型變量a的實質(zhì)是p存放的是a的地址。注意:(1)指針和指針變量是兩個不同的概念。(2)在int*p;這里*表示p是一個指針變量;m=*p;這里*和p結(jié)合起來,作為一個整體*p,表示p所指向的變量。也就是說,這兩個*的作用是不一樣的。下面我們通過例子來說明
8、這個問題。#include#includeintmain(intargc,char*argv[]){inti=1;int*p=NULL;inttemp;p=&i;temp=*p;printf("temp=%d,i=%d",temp,i);return0;}為了程序的可靠性,往往要對指針變量賦初值NULL。第一步,將光標(biāo)移動到p=&i;按F10設(shè)置斷點后按F9開始調(diào)試在“監(jiān)視”窗口中添加i,p,*p,temp。第二步,將光標(biāo)移到“printf("temp=%d