




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C編程VisualC的調(diào)試技術(shù)VisualC++的基本調(diào)試方法在開發(fā)程序的過程中,經(jīng)常需要查找程序中的錯(cuò)誤。這就需要利用調(diào)試工具來幫助讀者進(jìn)行程序的調(diào)試。當(dāng)然目前有許多調(diào)試工具,而集成在VisualC++中的調(diào)試工具以其強(qiáng)大的功能,深受用戶歡迎。第2頁/共21頁第1頁/共21頁錯(cuò)誤類型一個(gè)程序編寫完成后往往會(huì)存在錯(cuò)誤。有些錯(cuò)誤在編譯連接階段可以由編譯系統(tǒng)發(fā)現(xiàn)并指出,稱為語法錯(cuò)誤。一般來說,當(dāng)用戶對(duì)應(yīng)用程序進(jìn)行編譯(單擊菜單【Build】|【Compile】項(xiàng)或按下快捷鍵【Ctrl+F7】)后產(chǎn)生的錯(cuò)誤就是語法錯(cuò)誤,常見的語法錯(cuò)誤有拼寫錯(cuò)誤和參數(shù)設(shè)置錯(cuò)誤。例如,當(dāng)讀者將C++的輸出函數(shù)cout函數(shù)寫成cuot后,編譯系統(tǒng)給出如下圖20-1所示錯(cuò)誤提示。第3頁/共21頁第2頁/共21頁另一類錯(cuò)誤是邏輯錯(cuò)誤,該類錯(cuò)誤是沒有語法錯(cuò)誤的情況下,發(fā)生過得讓程序無法正確運(yùn)行的錯(cuò)誤。在具體編程中,當(dāng)修改完語法錯(cuò)誤生成了可執(zhí)行程序后,并不意味著程序已經(jīng)正確。讀者經(jīng)常會(huì)發(fā)現(xiàn)程序運(yùn)行的結(jié)果與預(yù)期的結(jié)果相去甚遠(yuǎn)。有時(shí)甚至在程序執(zhí)行過程中程序終止或發(fā)生死機(jī)。這種錯(cuò)誤稱為就是邏輯錯(cuò)誤,或者稱為運(yùn)行錯(cuò)誤。這些現(xiàn)象是因?yàn)樗惴ㄔO(shè)計(jì)不當(dāng)或編程實(shí)現(xiàn)時(shí)的疏忽造成的。通俗的說這種錯(cuò)誤就是BUG。所謂調(diào)試就是指在發(fā)現(xiàn)了程序存在運(yùn)行錯(cuò)誤以后,尋找錯(cuò)誤的原因和位置并排除錯(cuò)誤。這一工作是非常困難的。VisualC++的有兩個(gè)基本調(diào)試功能:找出BUG發(fā)生的地方和分析如何修改BUG。該調(diào)試工具允許讀者每次只執(zhí)行一行程序代碼。這樣可以更方便地找到BUG發(fā)生的地方。第4頁/共21頁第3頁/共21頁建立調(diào)試環(huán)境在VisualC++中每當(dāng)建立一個(gè)工程(Project)時(shí),VisualC++都會(huì)自動(dòng)建立兩個(gè)版本:Release版本和Debug版本。正如其字面意思所說的,Release版本是當(dāng)程序完成后,準(zhǔn)備發(fā)行時(shí)用來編譯的版本。而Debug版本是用在開發(fā)過程中進(jìn)行調(diào)試時(shí)所用的版本。在新建立的工程中,讀者所看到的是Debug版本。如果要選擇Release版本,可以單擊【Project】|【Settings】命令。第5頁/共21頁第4頁/共21頁設(shè)置斷點(diǎn)設(shè)置了調(diào)試環(huán)境后,讀者再來看一下調(diào)試的一般過程。所謂調(diào)試,就是在程序的運(yùn)行過程的某一階段觀測(cè)程序的狀態(tài),而在一般情況下程序是連續(xù)運(yùn)行的,所以必須使程序在某一地點(diǎn)停下來。所以讀者進(jìn)行調(diào)試所做的第一項(xiàng)工作就是設(shè)立斷點(diǎn)。其次,再運(yùn)行程序,當(dāng)程序在設(shè)立斷點(diǎn)處停下來時(shí),再利用各種工具觀察程序的狀態(tài)。程序在斷點(diǎn)停下來后,有時(shí)需要按用戶的要求控制程序的運(yùn)行,以進(jìn)一步觀測(cè)程序的流向。所以下面依次來介紹斷點(diǎn)的設(shè)置,如何控制程序的運(yùn)行以及各種觀察工具的利用。第6頁/共21頁第5頁/共21頁ActiveX控件的事件在VisualC++中,用戶可以設(shè)置多種類型的斷點(diǎn),可以根據(jù)斷點(diǎn)起作用的方式把這些斷點(diǎn)分為如下3類:與位置有關(guān)的斷點(diǎn)。與邏輯條件有關(guān)的斷點(diǎn)。與WINDOWS消息有關(guān)的斷點(diǎn)。第7頁/共21頁第6頁/共21頁位置斷點(diǎn)讀者只要把光標(biāo)移到要設(shè)斷點(diǎn)的位置。當(dāng)然這一行必須包含一條有效語句的。然后按工具條上的按鈕(Insert/RemoveBreakPoint)或按下快捷鍵【F9】。此時(shí)讀者將會(huì)在屏幕上看到在這一行的左邊出現(xiàn)一個(gè)紅色的圓點(diǎn),表示這一行設(shè)立了一個(gè)斷點(diǎn),如圖20-4所示。第8頁/共21頁第7頁/共21頁邏輯條件觸發(fā)斷點(diǎn)上面所講的斷點(diǎn)主要是由于其位置發(fā)揮作用的,即當(dāng)程序運(yùn)行到設(shè)立斷點(diǎn)的地方時(shí)程序?qū)?huì)停下來。但有時(shí)需要設(shè)立只與邏輯條件有關(guān)的斷點(diǎn),而與位置無關(guān)。讀者可以在【Breakpoint】對(duì)話框中的【Data】選項(xiàng)卡中輸入邏輯條件,如圖20-9所示。第9頁/共21頁第8頁/共21頁使用查看工具調(diào)試過程中最重要的是要觀察程序在運(yùn)行過程中的狀態(tài)。這樣用戶才能找出程序的錯(cuò)誤之處。這里所說的狀態(tài)包括各變量的值、寄存中的值、內(nèi)存中的值和堆棧中的值等。第10頁/共21頁第9頁/共21頁調(diào)試信息泡泡當(dāng)程序在斷點(diǎn)停下來后,要觀察一個(gè)變量或表達(dá)式的值的最容易的方法是利用調(diào)試信息泡泡。要看一個(gè)變量的值,只需在源程序窗口中,將鼠標(biāo)放到該變量上,將會(huì)看到一個(gè)信息泡泡彈出。其中顯示出該變量的值。要查看一個(gè)表達(dá)式的值,先選中該表達(dá)式,然后將鼠標(biāo)放到選中的表達(dá)式上。同樣會(huì)看到一個(gè)信息泡泡彈出以顯示該表達(dá)式的值。如圖20-16所示的紅色框線內(nèi)就是一個(gè)調(diào)試信息泡泡。第11頁/共21頁第10頁/共21頁變量窗口單擊【View】|【DebugWindow】|【Variables】命令,則變量窗口將出現(xiàn)在屏幕上。其中顯示著變量名及其對(duì)應(yīng)的值。讀者將會(huì)看到在變量觀察窗口的下部有3個(gè)標(biāo)簽:【Auto】、【Local】和【This】。選中不同的標(biāo)簽,不同類型的變量將會(huì)顯示在該窗口中,如圖20-17所示。第12頁/共21頁第11頁/共21頁觀察窗口單擊【VIEW】|【DebugWindow】|【W(wǎng)atch】命令,則觀察窗口將出現(xiàn)在屏幕上,如圖20-18所示。在下圖的觀察窗口中雙擊Name欄的某一空行,輸入要查看的變量名或表達(dá)式。回車后讀者將會(huì)看到對(duì)應(yīng)的值。觀察窗口可有多頁,分別對(duì)應(yīng)于標(biāo)簽Watch1、Watch2、Watch3等。第13頁/共21頁第12頁/共21頁快速查看變量對(duì)話框在快速查看變量對(duì)話框中,讀者可以像利用觀察窗口一樣來查看變量或表達(dá)式的值。還可以利用它來改變運(yùn)行過程中的變量。在【Debug】菜單,選擇【QuickWatch】命令。這時(shí)屏幕上將會(huì)出現(xiàn)【QuickWatch】對(duì)話框,如圖20-19所示。在上圖中的【Expression】編輯框中輸入變量名例如a。按回車后在【CurrentValue】格中將出現(xiàn)變量名及其當(dāng)前對(duì)應(yīng)的值,如圖20-20所示。第14頁/共21頁第13頁/共21頁高級(jí)調(diào)試技術(shù)前面介紹了調(diào)試工具的使用,利用它可以就進(jìn)行常規(guī)的調(diào)試,即使程序在某處停下來,再觀察程序的當(dāng)前壯態(tài)。而且這些工具在且它調(diào)試器中也有。但是在VisualC++程序的開發(fā)過程中,光有這些工具是不夠的。為了更快更好地開發(fā)程序,還需要利用更高級(jí)的調(diào)試工具。TRACE宏斷言對(duì)象的DUMP函數(shù)第15頁/共21頁第14頁/共21頁TRACE宏TRACE宏與在C語言中用的Printf函數(shù)類似。它使程序在運(yùn)行過程中輸出一些調(diào)試信息,以使讀者能了解程序的一些狀態(tài)。但有一點(diǎn)不同的是:TRACE宏只有在調(diào)試狀態(tài)下才有所輸出,而以前用的Printf函數(shù)在任何情況下都有輸出。和Printf函數(shù)一樣,TRACE函數(shù)可以接受多個(gè)參數(shù)。例如在以下代碼中就使用到了TRACER宏。intx=1;inty=16;floatz=32.0;TRACE("ThisisaTRACEstatement\n");TRACE("Thevalueofxis%d\n",x);TRACE("x=%dandy=%d\n",x,y);TRACE("x=%dandy=%xandz=%f\n",x,y,z);需要注意的是,TRACE宏只對(duì)Debug版本的工程產(chǎn)生作用。在Release版本的工程中,TRACE宏將被忽略。第16頁/共21頁第15頁/共21頁斷言在開發(fā)過程中可以假設(shè)只要程序運(yùn)行正確,某一條件肯定成立。如不成立,那么可以斷言程序肯定出錯(cuò),在這種情況下就可以利用ASSERT宏來設(shè)定斷言。ASSERT宏的參數(shù)是一個(gè)邏輯表達(dá)式。在程序運(yùn)行過程中,若該邏輯表達(dá)式為真,則不會(huì)發(fā)生任何動(dòng)作。若此表達(dá)式為假,系統(tǒng)將彈出一個(gè)對(duì)話框警告,并停止程序的執(zhí)行。同時(shí)要求用戶做出選擇:Abort、Ignore或Retry。若選擇Abort,系統(tǒng)將停止程序的執(zhí)行;若選擇Ignore,系統(tǒng)將忽略該錯(cuò)誤,并繼續(xù)執(zhí)行程序;若選擇Retry,系統(tǒng)將重新計(jì)算該表達(dá)式,并激活調(diào)試器。同TRACE宏一樣,ASSERT宏只DEBUG版本中起作用,在RELEASE版本中ASSERT宏將被忽略。第17頁/共21頁第16頁/共21頁下面程序段在函數(shù)中就加入了ASSERT宏來設(shè)定斷言。設(shè)定后程序能判斷何處出錯(cuò),其實(shí)現(xiàn)代碼如下所示。代碼清單20-11 #include<iostream> //包含頭文件2 #include<cassert> //包含ASSERT宏的頭文件3 usingnamespacestd;4 voidkk(char*st) //定義函數(shù)5 {6 assert(NULL!=st); //僅僅加入了這一行斷言7 cout<<st<<endl; //輸出字符串8 return;9 }10 intmain()11 {12 char*str="Welcometo21VisualC++"; //定義字符串并初始化13 kk(str); //調(diào)用函數(shù)14 str=NULL; //改變字符串值15 kk(str); //調(diào)用函數(shù)16 getchar(); 17 return0; //主函數(shù)返回值18 }第18頁/共21頁第17頁/共21頁綜合練習(xí)下列程序段求出100以內(nèi)的所有素?cái)?shù)。所謂素?cái)?shù)是指大于2且只能被1或本身整除的整數(shù)。判斷素?cái)?shù)的算法為:對(duì)于i,只要其能夠被2~i-1中任一個(gè)數(shù)整除,則i不是素?cái)?shù)。
第19頁/共21頁第18頁/共21頁代碼清單01 #include<iostream.h>02 intmain(intargc,char*argv[])03 {04 constn=100;05 inti,j;06 for(i=2;i<=n;i++)07 {08 intflag=1; 09 for(j=2;j<i;j++)10 if(i/j==0) 11 {12 flag=0;13 break;14
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)有土地開發(fā)建設(shè)合同范文
- 國(guó)際商標(biāo)使用權(quán)轉(zhuǎn)讓合同標(biāo)準(zhǔn)格式
- 合資成立分公司合同書
- 成都市房屋租賃簡(jiǎn)易合同模板
- 項(xiàng)目出資合同模板
- 水產(chǎn)養(yǎng)殖基地建設(shè)承包合同范本
- 建筑工程施工合同樣本(律師審核版)
- 訴訟離婚合同范本
- 廣播電視設(shè)備智能生物藥品臨床應(yīng)用技術(shù)考核試卷
- 信息技術(shù)創(chuàng)新與數(shù)字化轉(zhuǎn)型考核試卷
- 2024年單招計(jì)算機(jī)試題題庫及答案
- 肝癌科普講座課件
- 中國(guó)航天“大總師-孫家棟”
- 機(jī)電運(yùn)輸安全基本知識(shí)
- 基于51單片機(jī)的無功補(bǔ)償裝置
- 幼兒園公開課:大班語言《相反國(guó)》課件(優(yōu)化版)
- 水利設(shè)施維護(hù)投標(biāo)方案(技術(shù)標(biāo))
- 2024屆湖南省長(zhǎng)沙市湖南師大附中等校高三上學(xué)期月考(二)語文試題(解析版)
- 上海科技版小學(xué)二年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)全冊(cè)教案
- 氣缸磨損的測(cè)量說課教案
- 《高鐵乘務(wù)安全管理及應(yīng)急處置》課程教案-崔藝琳編寫
評(píng)論
0/150
提交評(píng)論