VC調(diào)試技術(shù)程序錯誤類型大致可分為語法錯誤和邏輯錯誤兩種類型。語法錯誤可以通過編譯器的錯誤消息更正。但是,邏輯錯誤是不可能的,因此在每個主要集成開發(fā)環(huán)境(IDE)中分析和消除程序中的邏輯錯誤,消除邏輯錯誤的過程也稱為調(diào)試(或調(diào)試),并描述了VC 6.0調(diào)試環(huán)境。
常用的調(diào)試命令如下:
Step into命令快捷方式:F11逐步執(zhí)行每條語句。函數(shù)發(fā)生時,進入函數(shù)并單步執(zhí)行該語句。
Step over命令快捷鍵:F10逐步執(zhí)行每個語句,但當函數(shù)出現(xiàn)時,系統(tǒng)會將函數(shù)作為“一個語句”執(zhí)行,以自動執(zhí)行內(nèi)容,而不是在函數(shù)內(nèi)逐步執(zhí)行。
Run to cursor指令捷徑:Ctrl F10系統(tǒng)會自動在使用者游標指向的陳述式之前執(zhí)行。(此功能有助于集中關(guān)注有問題的地方,從而節(jié)省調(diào)試時間。)。
Go命令快捷鍵:F5系統(tǒng)編譯、鏈接、自動運行程序,但程序在設(shè)置斷點的位置停止。
BuildExcute命令快捷鍵:Ctrl F5系統(tǒng)提供Pause,可以編譯、鏈接、執(zhí)行編譯后的程序代碼、不停留在中斷點,但在程序執(zhí)行結(jié)束后,用戶可以輕松觀察輸出。
Stop debug命令快捷方式:Shift F5此命令用于終止動態(tài)調(diào)試過程。
動態(tài)調(diào)試的主要方法——watch程序編譯通過后,如果使用step into、step over、run to cursor和go命令在程序運行過程中停止系統(tǒng),系統(tǒng)將進入調(diào)試狀態(tài)。
調(diào)試過程中,程序運行窗口將在后臺發(fā)送,程序?qū)@示在系統(tǒng)窗口中。其中黃色箭頭指向系統(tǒng)下一步要執(zhí)行的語句。系統(tǒng)窗口下面的監(jiān)控窗口就是我們要介紹的重點。watch窗口左右分為兩部分。左側(cè)部分暫時稱為“自動監(jiān)視區(qū)域”(即variable窗口),右側(cè)部分稱為“手動監(jiān)視區(qū)域”。(watch窗口)自動監(jiān)視區(qū)域是系統(tǒng)自動跟蹤的變量名。默認情況下,系統(tǒng)顯示auto標記,該標記顯示在執(zhí)行上一步期間程序中更改的變量。Locals標記跟蹤函數(shù)中的所有變量。
上面的find sourse組合框表示當前在locals標記下跟蹤的變量所屬的函數(shù)。說明:如果find sourse組合框的內(nèi)容變成灰色,則說明系統(tǒng)正在運行程序或等待輸入端的數(shù)據(jù)(通常在這種情況下),因此要注意程序運行窗口的內(nèi)容。但是,一般來說,受自動監(jiān)視區(qū)域監(jiān)視的變量是不夠的。有時需要自己定義需要跟蹤的變量——。在這種情況下,必須在“手動監(jiān)控”區(qū)域中輸入變量名(系統(tǒng)合法識別的表達式),以跟蹤所需的值。
注意:如果用戶定義了指向數(shù)組的watch,則變量左側(cè)會出現(xiàn)一個小''符號,表示數(shù)組可以“擴展”——,以顯示其中每個下標表示的內(nèi)容。這與其他高級語言的IDE略有不同。
VC的人性化設(shè)置:如果有很多用戶定義的變量,則通常需要滾動屏幕才能看到所有變量——VC。
設(shè)置斷點和一些基本調(diào)試技術(shù)斷點(breakpoint)是指調(diào)試期間,每當在斷點上執(zhí)行時自動停止(除非使用bulidexcute命令),否則執(zhí)行編譯后的代碼。嚴格地說,不被認為是調(diào)試命令)。通常與go和step over命令一起使用
如何設(shè)置斷點:在程序代碼中,轉(zhuǎn)到需要設(shè)置斷點的行,然后按F9鍵,代碼行左端將出現(xiàn)紅點——。這是VC斷點的標志。以后的程序在調(diào)試期間每次運行時都會在此處停止,因此用戶可以輕松地觀察watch的內(nèi)容。刪除斷點的命令與設(shè)置斷點的命令相同。如果在設(shè)置斷點的地方再次按F9鍵,左端的紅點將消失,斷點將被刪除。有時我們不需要斷點,但不需要“臨時”。此時,如果在設(shè)置斷點的位置按Ctrl F9鍵,您將看到原始實心點變?yōu)榭請A3354斷點。恢復(fù)斷點的功能也是按Ctrl F9鍵。當程序很長,需要大量斷點時,此功能特別有用。
條件斷點技術(shù)——實際上是在一些分支語句內(nèi)部設(shè)置斷點。當程序的一個部分有問題時,此技術(shù)特別有用。斷點設(shè)置位置信息這個因人而異,可以說是相當藝術(shù)的內(nèi)容。我不想再說了,但有一個基本原則可以說是斷點,所謂斷點,或者說是“分段”點。也就是說,在需要連續(xù)觀察的地方,必須使用step over或step into命令。(阿爾伯特愛因斯坦,美國作家)。
嗯,調(diào)試命令基本上就是這些。我想談?wù)務(wù){(diào)試過程中我個人的經(jīng)驗和體會。
1.動態(tài)調(diào)試不是萬能的。動態(tài)調(diào)試幾乎可以解決所有非算法問題,但動態(tài)調(diào)試花費了很多時間,這也是毋庸置疑的——,會干擾程序員的思維。其實相當多的錯誤往往是因為按錯了鍵盤。這個錯誤在動態(tài)調(diào)試中很難發(fā)現(xiàn),所以在開始調(diào)試每個程序之前,必須再次整理思路,仔細閱讀程序。用所謂的“靜態(tài)錯誤”的方法,可以先解決幾個明顯的低級錯誤,確認調(diào)試的重點。這樣不僅可以大大縮短調(diào)試時間,還可以更加包容自己
易發(fā)現(xiàn)一些思路方面的錯誤。2.調(diào)試時思路要跟著程序轉(zhuǎn)。說白了就是要集中精力于正在調(diào)試的語句段和正在變化的變量上。
3.模塊化能有效縮短調(diào)試時間。其實模塊化不僅僅能有效的縮短開發(fā)時間,更能有效的縮短調(diào)試時間。首先,模塊化使得我們夠方便的使用step over命令,而減少斷點的設(shè)置。其次,程序出錯的地方往往就是在幾個關(guān)鍵點上,使用了模塊化設(shè)計思路以后,我們就可以集中精力在那些關(guān)鍵點上,省去了不必要的單步調(diào)試。當然,能面向?qū)ο缶透昧恕?/p>
4.多用斷點和run to cursor命令,減少單步調(diào)試的使用——那樣太費時間了。
5.調(diào)試不要破壞程序的原本結(jié)構(gòu)。許多人喜歡在調(diào)試過程中輸出一些中間變量的值,認為這樣做比較直觀——當然,這也是一個很重要的手段,尤其在反復(fù)遞歸和循環(huán)嵌套的時候。不過我不推薦在非遞歸的程序中使用這種方法。這種方法最大的問題就是破壞了程序原本的結(jié)構(gòu)和邏輯,除非你在原本程序設(shè)計時就想到這一點。這點在程序很長或者思路很復(fù)雜時尤為明顯。否則為什么所有的編譯模式的程序語言都不約而同的提供了watch這一手段?解釋模式的程序語言?那是沒有辦法……
6.遇到bug時不要急于修改程序。也就是不要亂打補丁。道理和第5條一樣,要先仔細分析,然后在決定是否要修改——總之,要冷靜。尤其是刪除程序段的時候,我建議先把認為不需要的程序段先注釋掉。等到調(diào)試成功后再刪不遲。
1.《【vc60教程】VC 6.0單步調(diào)試》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《【vc60教程】VC 6.0單步調(diào)試》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2505776.html