vc++60程序調(diào)試設置斷點_第1頁
vc++60程序調(diào)試設置斷點_第2頁
vc++60程序調(diào)試設置斷點_第3頁
vc++60程序調(diào)試設置斷點_第4頁
vc++60程序調(diào)試設置斷點_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、VC+6.0調(diào)試工具使用初步 【摘要】程序設計初者學會IDE(集成開發(fā)環(huán)境)中提供的調(diào)試工具,是一件非常重要的事。本文在初學者有初步的程序設計體驗(只需要掌握到控制結構)為前提,介紹了單步執(zhí)行、斷點設置及觀察程序運行情況的方法,并配有練習的建議,方便讀者的學習。在編寫程序中,尤其是完成一個工程的過程中,通過編譯的程序往往也會存在錯誤(bug)。這種錯誤是運行錯誤和邏輯錯誤,比語法錯誤更隱蔽,更危險。如何找出這些錯誤?在冗長的代碼中,找出這些錯誤來并不總是一件容易的事。排錯(debug)是一件程序員不得不面對的麻煩事,但真正的程序員會把與bug戰(zhàn)斗當成自己的神圣使命。調(diào)試程序是程序員應該具備的基

2、本能力。在學習編寫程序過程中,學會調(diào)試程序是最實用的技能之一??梢约兇庖揽咳斯ぃ恍幸恍?,或一塊一塊地檢查,思考,很累人。也可以像現(xiàn)有的各種教材及課堂教學中介紹的,輸出變量及中間變量(用輸出語句cout<<.;),以觀察運行結果及運行的中間結果。這種方法簡潔方便,但增加了寫代碼的維護量,同時,有時并不能方便地找到問題所在。在實際的工作中,調(diào)試工作常用IDE(集成開發(fā)環(huán)境,如VC+6.0)提供的工具進行。本文旨在指導同學們初步學會利用VC+6.0調(diào)試程序的方法,學會單步運行程序和使用斷點的方法,并在過程中觀察運行環(huán)境(最重要的是變量)的變化,從而在今后能夠高效地完成程序的調(diào)試。一、認

3、識調(diào)試功能在組建(build)菜單中,點擊開始調(diào)試(start debug),在其下級子菜單中,包含了啟動調(diào)試器運行的各項子命令(如圖1所示)圖1 開始調(diào)試菜單各子命令及其功能如下:· Go:從程序中的當前語句開始執(zhí)行,直到遇到斷點(后面講)或遇到程序結束。 · Step Into:控制程序單步執(zhí)行,并在遇到函數(shù)調(diào)用時進入函數(shù)內(nèi)部。 · Run to Cursor:在調(diào)試運行程序時,使程序運行到當前光標所在位置時停止,相當于設置了一個臨時斷點。二、單步調(diào)試代碼利用圖1菜單中的Step into功能或按F11鍵,進入單步調(diào)試狀態(tài),有一個箭頭指向程序的第一行,每按一次

4、F11鍵,程序再向前執(zhí)行一行語句,如圖2所示。圖2 開始調(diào)試后的界面我們對圖2的界面進行觀察。首先,菜單中增加一個調(diào)試(debug)菜單,如圖中處,下面是菜單中的部分功能(鼠標浮到上面時,會有提示,請試一試。)· Step Into(F11):單步調(diào)試程序,遇到調(diào)用函數(shù)時,進入函數(shù)內(nèi)部逐步執(zhí)行; · Step Over(F10):也是單步調(diào)試程序,遇到調(diào)用函數(shù)時,并不進入函數(shù)內(nèi)容執(zhí)行; · Step Out:調(diào)試程序時,從正在執(zhí)行的某個嵌套結構的內(nèi)部跳到該結構的外部,常用于知道調(diào)用函數(shù)中不存在錯誤的情況; · Run to Cursor(CTRL-F10

5、):調(diào)試程序時,直接運行到插入點處。其次,和當前正在執(zhí)行的語句相關的變量,以及其當前的值顯示在了處。 再次,黃色箭頭代表了正在執(zhí)行的位置?!揪毩?】下面,針對求1+2+3+.+100的程序,體驗單步執(zhí)行。步驟:(1)編寫如圖所示求1+2+3+.+100的程序,排除編譯錯誤;(2)按前述開始單步執(zhí)行,用“Step Into(F11)”持續(xù)執(zhí)行,在執(zhí)行過程中,注意觀察變量的變化。· 調(diào)試中,要將自己的預期和計算機執(zhí)行的結果進行比較,當發(fā)現(xiàn)不一致,恭喜,問題找到了。 · 本程序循環(huán)要執(zhí)行100次!有的程序進入循環(huán)要執(zhí)行的次數(shù)更多,而初步跟蹤確定循環(huán)不可能出問題,需要快速

6、“跳出”循環(huán)。將光標移到循環(huán)后,用“Run to Cursor”,程序即運行到光標處。 · 在cout<<.一行繼續(xù)F11,會嚇人一跳,出現(xiàn)的界面是:圖3 程序會運行到“看不懂”的代碼中去,用Step Out功能退出這是因為F11的單步運行,進入到了實現(xiàn)cout功能的代碼中去了(教訓:以后再到這兒,切記用Step Over(F10),而不是Step Into(F11)),此時請用Step Out功能可以退出。【練習2】再將上面的過程進行幾遍,熟練上述過程,學會觀察,會靈活使用Step Over(F10)、Step Into(F11)、Step Out和Run to Cur

7、sor處理。提示:Step Over(F10)和Step Into(F11)的區(qū)別將在學習函數(shù)后更加明確,需要跟蹤自定義函數(shù)內(nèi)部代碼時,用Step Into(F11),不需要跟蹤時,就Over過去了。【練習3】將光標置于程序中某一語句上,用Run to Cursor(快捷鍵CTRL-F10),看看發(fā)生什么現(xiàn)象直接執(zhí)行到了光標處!這是一種快速觀察的方法。(PS:本練習受1樓博友留言啟發(fā)加上,表示感謝。)三、設置斷點和斷點應用斷點是程序執(zhí)行需要中斷的地方。可以讓程序中斷在需要的地方,從而方便其分析。有兩種設置斷點的方法,如圖4所示:· 將光標移到需要設置斷點的程序行,點擊工具欄上的“手型

8、”按鈕設置斷點。 · 利用鼠標右鍵設置:在程序行前的空白欄內(nèi)點鼠標右鍵,選擇菜單中的Insert/Remove Breakpoints選項可以設置斷點。圖4設置斷點及相關工具設置了斷點的程序行前會出現(xiàn)一個黑色的實心圓圈。取消斷點用同樣的按鈕和菜單。Go(F5)命令從程序中的當前語句開始執(zhí)行,直到遇到斷點(后面講)或遇到程序結束?!揪毩?】在程序中隨意設置和取消斷點(一個程序中可以根據(jù)需要設置多個斷點),然后用Go命令(F5)執(zhí)行,觀察變量及程序流程的變化。技巧:在調(diào)試的過程中,可以直接使用Run to Cursor,從而避免多次的用Step Into/Over等命令。如果設置了斷點,

9、直接運行程序就可以在斷點處停止,從而避免程序員總得關注光標的位置。一個程序中可以設多個斷點,這也為程序員提供了方便。四、用好快捷鍵和“調(diào)試”工具欄在使用中記住各功能的快捷鍵,這將提高你的工作效率??旖萱I可以從菜單中看到。可以在工具欄處點右鍵,選擇“調(diào)試”工具欄,如圖5,工具欄也可以方便你的工作。圖5 調(diào)試工具欄【練習5】將工具欄中的功能都點一點,看一看,想一想,但不求甚解。隨著學習的深入,我們會逐步掌握。五、程序調(diào)試方法小結上面僅介紹了程序調(diào)試的基本方法,但靈活運用可以為編寫出正確的程序提供強大的支撐。隨著經(jīng)驗的增加,簡短且算法簡單的程序你可能憑觀察就知一二。對需要觀察其運行過程的程序,可以這

10、樣做:· 增加必要的斷點(當然,嫌疑解除后去除斷點); · 如果必要,添加監(jiān)視,以便于觀察一些表達式的值; · 用Step Into、Step Over、Step Out或Run to Cursor等的組合,跟蹤程序執(zhí)行的過程 · 在運行過程中,和自己對運行結果的預期結合起來,思考程序可能出現(xiàn)的問題。 · 需要退出程序時,使用調(diào)試菜單中的“Stop Debugging”選項終止執(zhí)行。這時再修改程序。 · 如果程序執(zhí)行異常,一定要告訴自己:程序中一定有bug,不是機器的錯,我得找出bug來,Bug也一定會被你找出來?!緦嵺`1】利用單步執(zhí)

11、行、設置斷點等手段,觀察下面程序執(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論