




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VC+6.0調(diào)試工具使用初步 【摘要】程序設(shè)計(jì)初者學(xué)會IDE(集成開發(fā)環(huán)境)中提供的調(diào)試工具,是一件非常重要的事。本文在初學(xué)者有初步的程序設(shè)計(jì)體驗(yàn)(只需要掌握到控制結(jié)構(gòu))為前提,介紹了單步執(zhí)行、斷點(diǎn)設(shè)置及觀察程序運(yùn)行情況的方法,并配有練習(xí)的建議,方便讀者的學(xué)習(xí)。在編寫程序中,尤其是完成一個工程的過程中,通過編譯的程序往往也會存在錯誤(bug)。這種錯誤是運(yùn)行錯誤和邏輯錯誤,比語法錯誤更隱蔽,更危險(xiǎn)。如何找出這些錯誤?在冗長的代碼中,找出這些錯誤來并不總是一件容易的事。排錯(debug)是一件程序員不得不面對的麻煩事,但真正的程序員會把與bug戰(zhàn)斗當(dāng)成自己的神圣使命。調(diào)試程序是程序員應(yīng)該具備的基
2、本能力。在學(xué)習(xí)編寫程序過程中,學(xué)會調(diào)試程序是最實(shí)用的技能之一??梢约兇庖揽咳斯?,一行一行,或一塊一塊地檢查,思考,很累人。也可以像現(xiàn)有的各種教材及課堂教學(xué)中介紹的,輸出變量及中間變量(用輸出語句cout<<.;),以觀察運(yùn)行結(jié)果及運(yùn)行的中間結(jié)果。這種方法簡潔方便,但增加了寫代碼的維護(hù)量,同時,有時并不能方便地找到問題所在。在實(shí)際的工作中,調(diào)試工作常用IDE(集成開發(fā)環(huán)境,如VC+6.0)提供的工具進(jìn)行。本文旨在指導(dǎo)同學(xué)們初步學(xué)會利用VC+6.0調(diào)試程序的方法,學(xué)會單步運(yùn)行程序和使用斷點(diǎn)的方法,并在過程中觀察運(yùn)行環(huán)境(最重要的是變量)的變化,從而在今后能夠高效地完成程序的調(diào)試。一、認(rèn)
3、識調(diào)試功能在組建(build)菜單中,點(diǎn)擊開始調(diào)試(start debug),在其下級子菜單中,包含了啟動調(diào)試器運(yùn)行的各項(xiàng)子命令(如圖1所示)圖1 開始調(diào)試菜單各子命令及其功能如下:· Go:從程序中的當(dāng)前語句開始執(zhí)行,直到遇到斷點(diǎn)(后面講)或遇到程序結(jié)束。 · Step Into:控制程序單步執(zhí)行,并在遇到函數(shù)調(diào)用時進(jìn)入函數(shù)內(nèi)部。 · Run to Cursor:在調(diào)試運(yùn)行程序時,使程序運(yùn)行到當(dāng)前光標(biāo)所在位置時停止,相當(dāng)于設(shè)置了一個臨時斷點(diǎn)。二、單步調(diào)試代碼利用圖1菜單中的Step into功能或按F11鍵,進(jìn)入單步調(diào)試狀態(tài),有一個箭頭指向程序的第一行,每按一次
4、F11鍵,程序再向前執(zhí)行一行語句,如圖2所示。圖2 開始調(diào)試后的界面我們對圖2的界面進(jìn)行觀察。首先,菜單中增加一個調(diào)試(debug)菜單,如圖中處,下面是菜單中的部分功能(鼠標(biāo)浮到上面時,會有提示,請?jiān)囈辉?。?#183; Step Into(F11):單步調(diào)試程序,遇到調(diào)用函數(shù)時,進(jìn)入函數(shù)內(nèi)部逐步執(zhí)行; · Step Over(F10):也是單步調(diào)試程序,遇到調(diào)用函數(shù)時,并不進(jìn)入函數(shù)內(nèi)容執(zhí)行; · Step Out:調(diào)試程序時,從正在執(zhí)行的某個嵌套結(jié)構(gòu)的內(nèi)部跳到該結(jié)構(gòu)的外部,常用于知道調(diào)用函數(shù)中不存在錯誤的情況; · Run to Cursor(CTRL-F10
5、):調(diào)試程序時,直接運(yùn)行到插入點(diǎn)處。其次,和當(dāng)前正在執(zhí)行的語句相關(guān)的變量,以及其當(dāng)前的值顯示在了處。 再次,黃色箭頭代表了正在執(zhí)行的位置?!揪毩?xí)1】下面,針對求1+2+3+.+100的程序,體驗(yàn)單步執(zhí)行。步驟:(1)編寫如圖所示求1+2+3+.+100的程序,排除編譯錯誤;(2)按前述開始單步執(zhí)行,用“Step Into(F11)”持續(xù)執(zhí)行,在執(zhí)行過程中,注意觀察變量的變化。· 調(diào)試中,要將自己的預(yù)期和計(jì)算機(jī)執(zhí)行的結(jié)果進(jìn)行比較,當(dāng)發(fā)現(xiàn)不一致,恭喜,問題找到了。 · 本程序循環(huán)要執(zhí)行100次!有的程序進(jìn)入循環(huán)要執(zhí)行的次數(shù)更多,而初步跟蹤確定循環(huán)不可能出問題,需要快速
6、“跳出”循環(huán)。將光標(biāo)移到循環(huán)后,用“Run to Cursor”,程序即運(yùn)行到光標(biāo)處。 · 在cout<<.一行繼續(xù)F11,會嚇人一跳,出現(xiàn)的界面是:圖3 程序會運(yùn)行到“看不懂”的代碼中去,用Step Out功能退出這是因?yàn)镕11的單步運(yùn)行,進(jìn)入到了實(shí)現(xiàn)cout功能的代碼中去了(教訓(xùn):以后再到這兒,切記用Step Over(F10),而不是Step Into(F11)),此時請用Step Out功能可以退出?!揪毩?xí)2】再將上面的過程進(jìn)行幾遍,熟練上述過程,學(xué)會觀察,會靈活使用Step Over(F10)、Step Into(F11)、Step Out和Run to Cur
7、sor處理。提示:Step Over(F10)和Step Into(F11)的區(qū)別將在學(xué)習(xí)函數(shù)后更加明確,需要跟蹤自定義函數(shù)內(nèi)部代碼時,用Step Into(F11),不需要跟蹤時,就Over過去了?!揪毩?xí)3】將光標(biāo)置于程序中某一語句上,用Run to Cursor(快捷鍵CTRL-F10),看看發(fā)生什么現(xiàn)象直接執(zhí)行到了光標(biāo)處!這是一種快速觀察的方法。(PS:本練習(xí)受1樓博友留言啟發(fā)加上,表示感謝。)三、設(shè)置斷點(diǎn)和斷點(diǎn)應(yīng)用斷點(diǎn)是程序執(zhí)行需要中斷的地方??梢宰尦绦蛑袛嘣谛枰牡胤剑瑥亩奖闫浞治?。有兩種設(shè)置斷點(diǎn)的方法,如圖4所示:· 將光標(biāo)移到需要設(shè)置斷點(diǎn)的程序行,點(diǎn)擊工具欄上的“手型
8、”按鈕設(shè)置斷點(diǎn)。 · 利用鼠標(biāo)右鍵設(shè)置:在程序行前的空白欄內(nèi)點(diǎn)鼠標(biāo)右鍵,選擇菜單中的Insert/Remove Breakpoints選項(xiàng)可以設(shè)置斷點(diǎn)。圖4設(shè)置斷點(diǎn)及相關(guān)工具設(shè)置了斷點(diǎn)的程序行前會出現(xiàn)一個黑色的實(shí)心圓圈。取消斷點(diǎn)用同樣的按鈕和菜單。Go(F5)命令從程序中的當(dāng)前語句開始執(zhí)行,直到遇到斷點(diǎn)(后面講)或遇到程序結(jié)束?!揪毩?xí)4】在程序中隨意設(shè)置和取消斷點(diǎn)(一個程序中可以根據(jù)需要設(shè)置多個斷點(diǎn)),然后用Go命令(F5)執(zhí)行,觀察變量及程序流程的變化。技巧:在調(diào)試的過程中,可以直接使用Run to Cursor,從而避免多次的用Step Into/Over等命令。如果設(shè)置了斷點(diǎn),
9、直接運(yùn)行程序就可以在斷點(diǎn)處停止,從而避免程序員總得關(guān)注光標(biāo)的位置。一個程序中可以設(shè)多個斷點(diǎn),這也為程序員提供了方便。四、用好快捷鍵和“調(diào)試”工具欄在使用中記住各功能的快捷鍵,這將提高你的工作效率??旖萱I可以從菜單中看到??梢栽诠ぞ邫谔廃c(diǎn)右鍵,選擇“調(diào)試”工具欄,如圖5,工具欄也可以方便你的工作。圖5 調(diào)試工具欄【練習(xí)5】將工具欄中的功能都點(diǎn)一點(diǎn),看一看,想一想,但不求甚解。隨著學(xué)習(xí)的深入,我們會逐步掌握。五、程序調(diào)試方法小結(jié)上面僅介紹了程序調(diào)試的基本方法,但靈活運(yùn)用可以為編寫出正確的程序提供強(qiáng)大的支撐。隨著經(jīng)驗(yàn)的增加,簡短且算法簡單的程序你可能憑觀察就知一二。對需要觀察其運(yùn)行過程的程序,可以這
10、樣做:· 增加必要的斷點(diǎn)(當(dāng)然,嫌疑解除后去除斷點(diǎn)); · 如果必要,添加監(jiān)視,以便于觀察一些表達(dá)式的值; · 用Step Into、Step Over、Step Out或Run to Cursor等的組合,跟蹤程序執(zhí)行的過程 · 在運(yùn)行過程中,和自己對運(yùn)行結(jié)果的預(yù)期結(jié)合起來,思考程序可能出現(xiàn)的問題。 · 需要退出程序時,使用調(diào)試菜單中的“Stop Debugging”選項(xiàng)終止執(zhí)行。這時再修改程序。 · 如果程序執(zhí)行異常,一定要告訴自己:程序中一定有bug,不是機(jī)器的錯,我得找出bug來,Bug也一定會被你找出來。【實(shí)踐1】利用單步執(zhí)
11、行、設(shè)置斷點(diǎn)等手段,觀察下面程序執(zhí)行的過程1.cpp view plaincopyprint?1. #include <iostream> 2. using namespace std; 3. int main() 4. 5. int a=1,b=2,c=3; 6. if(a<=c) 7.
12、0; if(b=c) 8. cout<<"a="<<a<<endl; 9. else 10. cout<<"b="<<b<<endl; 11.
13、60; cout<<"c="<<c<<endl; 12. return 0; 13. #include <iostream>using namespace std;int main() int a=1,b=2,c=3; if(a<=c) if(b=c) cout<<"a="<&l
14、t;a<<endl; else cout<<"b="<<b<<endl; cout<<"c="<<c<<endl; return 0; 2. cpp view plaincopyprint?1. #include <iostream> 2. using namespace std; 3. int main() 4. 5.
15、0; int x=1,a=0,b=0; 6. switch (x) 7. 8. case 0: a+; break; 9. c
16、ase 1: b+; 10. case 2: a+; b+; break; 11. case 3: a+; b+; 12. 13. cout<<
17、"a="<<a<<",b="<<b<<endl; 14. return 0; 15. #include <iostream>using namespace std;int main() int x=1,a=0,b=0; switch (x) case 0: a+; break; case 1: b+; case 2: a+; b+; break; case 3: a+;
18、b+; cout<<"a="<<a<<",b="<<b<<endl; return 0;3.cpp view plaincopyprint?1. #include <iostream> 2. using namespace std; 3. int main ( ) 4. 5.
19、; int i , j, s=0; 6. for (i=1; i<=4; i+) 7. 8. for( j=1; j<=i; j+) 9.
20、0; s=s+1; 10. 11. cout<<”s=”<<s<<endl; 12. return 0; 13. #include <iostream>using n
21、amespace std; int main ( ) int i , j, s=0;for (i=1; i<=4; i+)for( j=1; j<=i; j+)s=s+1;cout<<”s=”<<s<<endl;return 0;4. cpp view plaincopyprint?1. #include <iostream> 2. using namespace std; 3. int main() 4. 5. int number=1024,digit; 6. do 7.
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 客房部倉庫管理制度
- 室外儲油罐管理制度
- 家政功能室管理制度
- 弱電設(shè)備間管理制度
- 微機(jī)室衛(wèi)生管理制度
- 心理康復(fù)室管理制度
- 快遞中轉(zhuǎn)倉管理制度
- 懷化國醫(yī)堂管理制度
- 總工會財(cái)務(wù)管理制度
- 總裁班班級管理制度
- 工程售后服務(wù)管理方案
- DB43∕T 862-2014 保靖黃金茶 毛尖功夫紅茶
- 中職語文高二上學(xué)期拓展模塊上冊期末模擬卷1解析版
- 經(jīng)濟(jì)師考試建筑與房地產(chǎn)經(jīng)濟(jì)高級經(jīng)濟(jì)實(shí)務(wù)試卷及答案指導(dǎo)(2025年)
- 外研版初中英語九年級下冊教案 全冊
- 2024年新《反洗錢法》修訂要點(diǎn)解讀
- 2022-2023學(xué)年廣東省深圳市南山區(qū)七年級(下)期末歷史試卷
- 大學(xué)體育2學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 四年級語文《黃繼光》教學(xué)名師公開課獲獎?wù)n件百校聯(lián)賽一等獎?wù)n件
- 電力行業(yè)設(shè)備檢修與維護(hù)規(guī)程
- 中國書法史學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論