




已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C Free 5.0 程序的單步調(diào)試創(chuàng)建一份新的代碼文件可直接點(diǎn)擊“文件”下的白色圖標(biāo),或點(diǎn)擊“文件”選擇“新建”,或按快捷鍵“Ctrl + N”(C Free 5.0默認(rèn)情況下新建的代碼文件為.cpp 格式,可在“工具”、“環(huán)境選項”、“新建文件類型”中更改,C語言標(biāo)準(zhǔn)格式為.c 格式)基于實(shí)例的C程序調(diào)試介紹一、查看變量的內(nèi)容# include int main(int argc, char* argv) int i; int sum; sum=0; for(i=1;i=10;i+) sum=sum+i; printf(sum=%d,sum); return 0; 第一步,打開C Free 5.0,輸入上面的代碼。第二步,把光標(biāo)移到“sum=0;”這一行,按F10 它的作用是設(shè)一個斷點(diǎn),程序運(yùn)行到這里時,會停下來。也就是說,接下來,程序必須通過按F7鍵單步運(yùn)行了。第三步:按F9 (開始調(diào)試) 我們發(fā)現(xiàn)有一箭頭停留在這句語句上,它指示程序停留的位置,而箭頭所在的語句(“sum=0;”)還沒有執(zhí)行。事實(shí)上,我們可以通過看一下內(nèi)存變量sum的內(nèi)容來驗證。方法是這樣的:打開“調(diào)試”下的“監(jiān)視”,或者按快捷鍵“Alt + 3”。在“監(jiān)視”的空白處點(diǎ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)點(diǎn)第六步,一步一步地按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這個條件不滿足,所以程序退出循環(huán))。附帶提一下,當(dāng)程序已經(jīng)執(zhí)行了“sum=0;”這一句語句后,如果我們直接把光標(biāo)移到“printf(sum=%d,sum);”,然后按Ctrl+ F8,我們可以直接把上面的for循環(huán)都執(zhí)行了,而不必一步一步地按F7。在實(shí)踐中,為了查找程序的邏輯錯誤,我們往往要單步運(yùn)行該程序好幾遍。如果已經(jīng)通過單步調(diào)試驗證某一段語句(如一個for循環(huán)語句或者幾個用戶定義的函數(shù))正確了,我們就可以用Ctrl+ F8跳過這段語句,直接運(yùn)行到還未測試的語句。二、F7(進(jìn)入)和F8(跳過)的區(qū)別# include int add(int m,int n) int s; s=m+n; return s; int main(int argc, char* argv) int i=1; int j=2; int sum; sum=add(i,j); printf(sum=%d,sum); return 0; 第一步, 把光標(biāo)移到“sum=add(i,j);”,按F10設(shè)置斷點(diǎn)后按F9開始調(diào)試,此時“sum=add(i,j);”這句語句還沒有執(zhí)行。接下來,如果按F7,則程序單步執(zhí)行到int add(int m,int n)的函數(shù)體,此時箭頭停留的位置如下圖所示。如果按不按F7而按F8,則把int add(int m,int n)內(nèi)的語句全部執(zhí)行了(也就是說程序不會單步運(yùn)行到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)容,通過測試用例檢查一下問題出在那里。三、關(guān)于一重指針我們知道,一個指針是一個變量的地址,是一個常量。存放一個變量的地址的變量是指針變量。例如:“int a=1;int m; int *p;p=&a;”說明p是一個指針變量,它的內(nèi)容為整型變量a的地址。*p就是p所指向的變量a。指針變量p指向整型變量a的實(shí)質(zhì)是p存放的是a的地址。注意:(1)指針和指針變量是兩個不同的概念。(2)在int *p;這里*表示p是一個指針變量; m=*p;這里*和p結(jié)合起來,作為一個整體*p,表示p所指向的變量。也就是說,這兩個*的作用是不一樣的。下面我們通過例子來說明這個問題。#include #include int main(int argc, char* argv) int i=1; int *p=NULL; int temp; p=&i; temp=*p; printf(temp=%d,i=%d,temp,i); return 0; 為了程序的可靠性,往往要對指針變量賦初值NULL。第一步,將光標(biāo)移動到p=&i;按F10設(shè)置斷點(diǎn)后按F9開始調(diào)試在“監(jiān)視”窗口中添加i,p,*p,temp。第二步,將光標(biāo)移到“printf(temp=%d,i=%d,temp,i);”,按Ctrl + F8 。這時我們可以在“監(jiān)視”窗口中發(fā)現(xiàn)i的內(nèi)容為1,*p的內(nèi)容為1,p的內(nèi)容為0x28ff44(注意每次調(diào)試時,地址可能不一樣,因為編譯器為變量分配的地址會變的),temp的內(nèi)容為1。*p的內(nèi)容和temp的內(nèi)容是一樣的。說明:這里0x28ff44是i的地址,另外,系統(tǒng)每次分配給程序的數(shù)據(jù)段往往不一樣,我們在調(diào)試程序時,在“監(jiān)視”窗口中觀察到的指針變量p的內(nèi)容往往不是0x28ff44,這是正常的。下面兩個小節(jié)涉及到具體地址的例子也一樣。四、指針作為函數(shù)的參數(shù)#include #include void swap(int *p,int *q) int temp; temp=*p; *p=*q; *q=temp; int main(int argc, char* argv) int i=1; int j=2; int *address_i=NULL; int *address_j=NULL; address_i=&i; address_j=&j; swap(&i,&j); printf(i=%d,j=%d,i,j); printf(%d %d,*address_i,*address_j); return 0; 函數(shù)swap的作用是交換兩個內(nèi)存變量的值。第一步,將光標(biāo)移動到address_i=&i;按F10設(shè)置斷點(diǎn)后按F9開始調(diào)試在“監(jiān)視”窗口中添加i,j,address_i,p,q,*p,*q,temp。第二步,將光標(biāo)移到swap(&i,&j);按Ctrl+F8。這時我們可以發(fā)現(xiàn)address_i的內(nèi)容為0x28ff44(對應(yīng)&i),address_j的內(nèi)容為0x28ff40(對應(yīng)&j)。第三步,按F7,進(jìn)入到函數(shù)swap的函數(shù)體,這時我們發(fā)現(xiàn)“監(jiān)視”窗口中p的內(nèi)容為0x28ff44(對應(yīng)&i),q的內(nèi)容為0x28ff40(對應(yīng)&j)。此時,“監(jiān)視”窗口中address_i,address_j,i,j都出現(xiàn)了“未知”這樣的信息,這是因為當(dāng)前程序執(zhí)行到了函數(shù)swap的函數(shù)體,而“監(jiān)視”窗口中顯示的內(nèi)容為當(dāng)前正在執(zhí)行的函數(shù)里的變量和表達(dá)式。為此,我們通過觀察*p的內(nèi)容來觀察i的內(nèi)容,通過觀察*q的內(nèi)容來觀察j的內(nèi)容。(這里涉及到了形參和實(shí)參的對應(yīng)關(guān)系,p對應(yīng)&i,q對應(yīng)&j ) 第四步按F7執(zhí)行temp=*p;此時,temp的內(nèi)容1,如下圖所示。這里指針變量p放了整型變量i的地址,所以p指向i,所謂的指向其實(shí)就是一個變量放了另一個變量的地址。第五步,按F7執(zhí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 24項高危管理制度
- 6基地溯源管理制度
- 柴油加油安全管理制度
- 標(biāo)桿班組精細(xì)管理制度
- 校內(nèi)飲水安全管理制度
- 校園保安著裝管理制度
- 校園商店安全管理制度
- 校園封閉靜默管理制度
- 校園教室使用管理制度
- 校園班級菜園管理制度
- 等高線地形圖試題附答案解析
- 《空腔臟器穿孔》課件
- 風(fēng)濕免疫疾病的中醫(yī)藥治療與輔助療法
- 乒乓球培訓(xùn)協(xié)議書
- 無創(chuàng)呼吸機(jī)使用培訓(xùn)
- 園林植物病理學(xué)實(shí)習(xí)
- Animate動畫設(shè)計實(shí)例教程高職全套教學(xué)課件
- DB22-T+3541-2023日間手術(shù)中心護(hù)理質(zhì)量安全管理規(guī)范
- 小學(xué)六年級畢業(yè)動員會 課件( 26張ppt)
- 流體力學(xué)-大連理工大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 2023年度湖南省自然科學(xué)獎項目公示材料
評論
0/150
提交評論