




已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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)境選項(xiàng)”、“新建文件類型”中更改,C語(yǔ)言標(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; 第一步,打開(kāi)C Free 5.0,輸入上面的代碼。第二步,把光標(biāo)移到“sum=0;”這一行,按F10 它的作用是設(shè)一個(gè)斷點(diǎn),程序運(yùn)行到這里時(shí),會(huì)停下來(lái)。也就是說(shuō),接下來(lái),程序必須通過(guò)按F7鍵單步運(yùn)行了。第三步:按F9 (開(kāi)始調(diào)試) 我們發(fā)現(xiàn)有一箭頭停留在這句語(yǔ)句上,它指示程序停留的位置,而箭頭所在的語(yǔ)句(“sum=0;”)還沒(méi)有執(zhí)行。事實(shí)上,我們可以通過(guò)看一下內(nèi)存變量sum的內(nèi)容來(lái)驗(yàn)證。方法是這樣的:打開(kāi)“調(diào)試”下的“監(jiān)視”,或者按快捷鍵“Alt + 3”。在“監(jiān)視”的空白處點(diǎn)擊鼠標(biāo)右鍵,選擇“添加監(jiān)視”。輸入需要監(jiān)視的變量名,這里輸入為sum 這時(shí)我們可以在監(jiān)視窗口中看到sum的內(nèi)容不為0,而是一個(gè)隨機(jī)的值。第四步,我們按一下F7(進(jìn)入),我們發(fā)現(xiàn)sum的內(nèi)容變?yōu)?了。這說(shuō)明“sum=0;”這句語(yǔ)句被執(zhí)行了。我們還可以用同樣的方法看一下i的內(nèi)容。只需要鼠標(biāo)點(diǎn)第六步,一步一步地按F7,我們可以發(fā)現(xiàn)在單步執(zhí)行for循環(huán)語(yǔ)句的時(shí)候i和sum的內(nèi)容在不斷變化。當(dāng)退出循環(huán)時(shí),我們發(fā)現(xiàn)i的內(nèi)容為11(因?yàn)樽兞縤的內(nèi)容為11,i=10這個(gè)條件不滿足,所以程序退出循環(huán))。附帶提一下,當(dāng)程序已經(jīng)執(zhí)行了“sum=0;”這一句語(yǔ)句后,如果我們直接把光標(biāo)移到“printf(sum=%d,sum);”,然后按Ctrl+ F8,我們可以直接把上面的for循環(huán)都執(zhí)行了,而不必一步一步地按F7。在實(shí)踐中,為了查找程序的邏輯錯(cuò)誤,我們往往要單步運(yùn)行該程序好幾遍。如果已經(jīng)通過(guò)單步調(diào)試驗(yàn)證某一段語(yǔ)句(如一個(gè)for循環(huán)語(yǔ)句或者幾個(gè)用戶定義的函數(shù))正確了,我們就可以用Ctrl+ F8跳過(guò)這段語(yǔ)句,直接運(yùn)行到還未測(cè)試的語(yǔ)句。二、F7(進(jìn)入)和F8(跳過(guò))的區(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開(kāi)始調(diào)試,此時(shí)“sum=add(i,j);”這句語(yǔ)句還沒(méi)有執(zhí)行。接下來(lái),如果按F7,則程序單步執(zhí)行到int add(int m,int n)的函數(shù)體,此時(shí)箭頭停留的位置如下圖所示。如果按不按F7而按F8,則把int add(int m,int n)內(nèi)的語(yǔ)句全部執(zhí)行了(也就是說(shuō)程序不會(huì)單步運(yùn)行到add函數(shù)的里面) 此時(shí)箭頭停留的位置如下圖所示。也就是說(shuō),碰到函數(shù),F(xiàn)7會(huì)單步執(zhí)行函數(shù)體的每一句語(yǔ)句,而F8則把函數(shù)當(dāng)作一句普通的C語(yǔ)言語(yǔ)句來(lái)執(zhí)行。在調(diào)試程序的時(shí)候,我們可以這樣做:如果我們已經(jīng)通過(guò)測(cè)試發(fā)現(xiàn)某一個(gè)函數(shù)已經(jīng)正確,那么我們不必單步執(zhí)行函數(shù)體的每一句語(yǔ)句;否則,我們單步執(zhí)行函數(shù)體的每一句語(yǔ)句,監(jiān)視相關(guān)的變量的內(nèi)容,通過(guò)測(cè)試用例檢查一下問(wèn)題出在那里。三、關(guān)于一重指針我們知道,一個(gè)指針是一個(gè)變量的地址,是一個(gè)常量。存放一個(gè)變量的地址的變量是指針變量。例如:“int a=1;int m; int *p;p=&a;”說(shuō)明p是一個(gè)指針變量,它的內(nèi)容為整型變量a的地址。*p就是p所指向的變量a。指針變量p指向整型變量a的實(shí)質(zhì)是p存放的是a的地址。注意:(1)指針和指針變量是兩個(gè)不同的概念。(2)在int *p;這里*表示p是一個(gè)指針變量; m=*p;這里*和p結(jié)合起來(lái),作為一個(gè)整體*p,表示p所指向的變量。也就是說(shuō),這兩個(gè)*的作用是不一樣的。下面我們通過(guò)例子來(lái)說(shuō)明這個(gè)問(wèn)題。#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; 為了程序的可靠性,往往要對(duì)指針變量賦初值NULL。第一步,將光標(biāo)移動(dòng)到p=&i;按F10設(shè)置斷點(diǎn)后按F9開(kāi)始調(diào)試在“監(jiān)視”窗口中添加i,p,*p,temp。第二步,將光標(biāo)移到“printf(temp=%d,i=%d,temp,i);”,按Ctrl + F8 。這時(shí)我們可以在“監(jiān)視”窗口中發(fā)現(xiàn)i的內(nèi)容為1,*p的內(nèi)容為1,p的內(nèi)容為0x28ff44(注意每次調(diào)試時(shí),地址可能不一樣,因?yàn)榫幾g器為變量分配的地址會(huì)變的),temp的內(nèi)容為1。*p的內(nèi)容和temp的內(nèi)容是一樣的。說(shuō)明:這里0x28ff44是i的地址,另外,系統(tǒng)每次分配給程序的數(shù)據(jù)段往往不一樣,我們?cè)谡{(diào)試程序時(shí),在“監(jiān)視”窗口中觀察到的指針變量p的內(nèi)容往往不是0x28ff44,這是正常的。下面兩個(gè)小節(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的作用是交換兩個(gè)內(nèi)存變量的值。第一步,將光標(biāo)移動(dòng)到address_i=&i;按F10設(shè)置斷點(diǎn)后按F9開(kāi)始調(diào)試在“監(jiān)視”窗口中添加i,j,address_i,p,q,*p,*q,temp。第二步,將光標(biāo)移到swap(&i,&j);按Ctrl+F8。這時(shí)我們可以發(fā)現(xiàn)address_i的內(nèi)容為0x28ff44(對(duì)應(yīng)&i),address_j的內(nèi)容為0x28ff40(對(duì)應(yīng)&j)。第三步,按F7,進(jìn)入到函數(shù)swap的函數(shù)體,這時(shí)我們發(fā)現(xiàn)“監(jiān)視”窗口中p的內(nèi)容為0x28ff44(對(duì)應(yīng)&i),q的內(nèi)容為0x28ff40(對(duì)應(yīng)&j)。此時(shí),“監(jiān)視”窗口中address_i,address_j,i,j都出現(xiàn)了“未知”這樣的信息,這是因?yàn)楫?dāng)前程序執(zhí)行到了函數(shù)swap的函數(shù)體,而“監(jiān)視”窗口中顯示的內(nèi)容為當(dāng)前正在執(zhí)行的函數(shù)里的變量和表達(dá)式。為此,我們通過(guò)觀察*p的內(nèi)容來(lái)觀察i的內(nèi)容,通過(guò)觀察*q的內(nèi)容來(lái)觀察j的內(nèi)容。(這里涉及到了形參和實(shí)參的對(duì)應(yīng)關(guān)系,p對(duì)應(yīng)&i,q對(duì)應(yīng)&j ) 第四步按F7執(zhí)行temp=*p;此時(shí),temp的內(nèi)容1,如下圖所示。這里指針變量p放了整型變量i的地址,所以p指向i,所謂的指向其實(shí)就是一個(gè)變量放了另一個(gè)變量的地址。第五步,按F7執(zhí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西寧花卉大棚管理辦法
- 宜興存儲(chǔ)檔案管理辦法
- 部門(mén)在家辦公管理辦法
- 肺與健康課件
- 肢端肥大護(hù)理課件
- 股骨護(hù)理課件
- 腸癖中醫(yī)教學(xué)課件
- 回彈儀培訓(xùn)課件
- 二零一九年小考數(shù)學(xué)試卷
- 高三考數(shù)學(xué)試卷
- 中式面點(diǎn)師培訓(xùn)課件
- 2023年主任醫(yī)師(正高)-中醫(yī)內(nèi)科學(xué)(正高)考試歷年真題集錦附答案
- 農(nóng)村分家協(xié)議書(shū)4篇
- 中國(guó)石油天然氣集團(tuán)公司管理人員違紀(jì)違規(guī)行為處分規(guī)定
- CJJ2-2020城市橋梁工程施工與質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 第一步 SYB創(chuàng)業(yè)意識(shí)培訓(xùn):將你作為創(chuàng)業(yè)者來(lái)評(píng)價(jià)
- 安全事故應(yīng)急響應(yīng)程序流程圖
- 小學(xué)五年級(jí)數(shù)學(xué)列式計(jì)算
- LY/T 1812-2009林地分類
- GB/T 28874-2012空間科學(xué)實(shí)驗(yàn)數(shù)據(jù)產(chǎn)品分級(jí)規(guī)范
- GB/T 19808-2005塑料管材和管件公稱外徑大于或等于90mm的聚乙烯電熔組件的拉伸剝離試驗(yàn)
評(píng)論
0/150
提交評(píng)論