



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Delphi調(diào)試概述除非你的程序只有幾行,否則幾乎不可能一次寫成,因此調(diào)試就非常必要。然而許多初學(xué)者 不知道如何進(jìn)行調(diào)試,寫完程序就運(yùn)行,發(fā)現(xiàn)結(jié)果不對再看代碼,這樣覺得非常吃力。這里, 簡單介紹一下Delphi所提供的調(diào)試功能。1.語法檢查(Syntax Check)Delphi提供了語法檢查的功能,這個功能和正常編譯很相似,同樣也會給出各類錯誤和警告 信息,但是不會生成代碼。必須重視Delphi給出的任何信息,很多簡單的錯誤就能夠在這個階段被發(fā)現(xiàn)。Delphi的編譯 信息分為4類:Fault (故障),Error (錯誤),Warning (警告)和Hint (提示)。Fault是指 導(dǎo)致編
2、譯程序不能繼續(xù)工作的錯誤,例如內(nèi)存溢出等;Error是指發(fā)現(xiàn)用戶程序不符合某些 規(guī)定而導(dǎo)致不能按照用戶程序的要求進(jìn)行處理;Warning是指用戶程序使用了某些不符合規(guī) 定的形式,但是并不影響編譯程序生成目標(biāo)文件;Hint是指編譯程序?qū)τ脩舫绦虻哪承┬问?提出了懷疑。前兩類信息是必須要解決的,否則你不能運(yùn)行你的程序,但是往往會有很多人忽略后兩種信 息。然而,這些信息卻是非常重要的。對于下面這個代碼,編譯程序?qū)霈F(xiàn)一個Warning:vara,b:Integer;begin.if a 100 thenif ab then begin.end;end.end.編譯程序會告訴你,在.(句號)后面的內(nèi)
3、容被忽略了,實(shí)際上你會發(fā)現(xiàn)你漏了一個begin, 同時將最后第二個end后面的;”(分號)誤寫成.(句號)了。再看看下面的代碼:vara,b:Integer;beginb:=a+1;end;編譯程序會給出一個Hint,告訴你a尚未被初始化,通常沒有被初始化的變量其內(nèi)容是不確 定的。由上可見,編譯程序可以對你的程序進(jìn)行初步的調(diào)試,協(xié)助你排除一些故障。但是僅僅這樣是完全不夠的,需要更加強(qiáng)大的調(diào)試能力才能勝任更加復(fù)雜的程序調(diào)試任務(wù)。2.啟動、暫停、中止集成調(diào)試程序最基本、最重要的調(diào)試手段包括:單步跟蹤、斷點(diǎn)、變量觀察、堆棧檢查等。所有這些功能 在Delphi的集成調(diào)試程序中都能提供。當(dāng)你按下F9(C
4、ompile and Run,編譯并運(yùn)行)一個程序時,就已經(jīng)啟動了 Delphi的集成調(diào) 試程序,而按下Ctrl+Break(Program Pause,程序暫停)時則會暫停被調(diào)試程序返回到集成 調(diào)試程序中去,再次按下F9會從暫停地地方繼續(xù)執(zhí)行,而Alt+F2(Program Reset,程序復(fù) 位)則會完全中止被調(diào)試程序的執(zhí)行,返回集成調(diào)試程序中去。3單步跟蹤(Step)所謂單步跟蹤是指一行一行地執(zhí)行程序,每執(zhí)行一行語句后就停下來等待指示,這樣你就能 夠仔細(xì)了解程序的執(zhí)行順序,以及當(dāng)時的各種狀況。注意:雖然Object Pascal允許在一行內(nèi)書寫任意多的語句,但是所有的單步跟蹤都以行”為
5、單位,因此為了便于調(diào)試,主張?jiān)谝恍袃?nèi)只寫一條語句,否則會給你帶來很大的麻煩。單步跟蹤可以分為Step Over (跳過)、Trace Into (跟蹤進(jìn)入)和Trace to Next Source Line (跟 蹤到下一條源代碼行)。Step Over和Trace Into都是執(zhí)行一行語句,差別在于遇到過程和函數(shù)時Trace Into將會進(jìn)入 過程和函數(shù),而Step Over不會,而只會把過程和函數(shù)作為一條語句執(zhí)行。當(dāng)使用Ctrl+Break暫停程序時,程序不一定停在你的源代碼位置上,而可能是在操作系統(tǒng)或 者其它模塊中,此時集成調(diào)試程序會出現(xiàn)一個CPU窗口(CPU Window),用匯編指
6、令的形式 顯示當(dāng)前的內(nèi)容,可以用Trace to Next Source Line繼續(xù)執(zhí)行程序,直到程序執(zhí)行到第一條有 源代碼的地方。4 斷點(diǎn)(Breakpoint)斷點(diǎn)是調(diào)試中非常重要的一個手段。由于在執(zhí)行到某些代碼前需要執(zhí)行許多其它代碼,不可 能用單步跟蹤一條一條執(zhí)行過來,這時只要在需要暫停的地方設(shè)置一個斷點(diǎn),然后讓程序運(yùn) 行,當(dāng)執(zhí)行到這個斷點(diǎn)位置時不需要用戶干預(yù)就會暫停并返回集成調(diào)試程序。Delphi提供了豐富的斷點(diǎn)功能,包括:源代碼斷點(diǎn)、指令斷點(diǎn)、數(shù)據(jù)斷點(diǎn)等。源代碼斷點(diǎn)(Source Breakpoint)是指在你的源程序中設(shè)置斷點(diǎn),指令斷點(diǎn)(Address Breakpoint) 是
7、指在某機(jī)器指令處設(shè)置斷點(diǎn),數(shù)據(jù)斷點(diǎn)(Data Breakpoint)是指當(dāng)寫入某變量時暫停用戶 程序。所有的斷點(diǎn)都可以設(shè)置更詳細(xì)的屬性,包括:條件、通過次數(shù)、組、高級操作等。條件(Condition)是指觸發(fā)斷點(diǎn)的條件,例如你可以寫:a=10,表示當(dāng)a等于10時在這個 斷點(diǎn)位置暫停; 通過次數(shù)(Pass Count)是指即使符合條件,也需要執(zhí)行這些次數(shù)才N暫停,例如在某斷點(diǎn) 設(shè)置通過次數(shù)為5,則表示當(dāng)?shù)?次通過這個斷點(diǎn)時才暫停程序,當(dāng)然,如果有條件存在的 話還要符合相當(dāng)次數(shù)的條件;組(Group)是指一組斷點(diǎn),你可以用一個名字來標(biāo)記許多斷點(diǎn),這樣你可以用禁止或允許 組(Disable Grou
8、p/Enable Group)來同時打開或禁止多個斷點(diǎn)。高級操作是指和每個斷點(diǎn)相關(guān)的一些行為(Action),具體如下:中斷(Break):中斷程序,這是默認(rèn)操作。忽略后續(xù)異常(Ignore subsequent exceptions):通過這個斷點(diǎn)后忽略所有異常(exceptions); 處理后續(xù)異常(Handle subsequent exceptions):通過這個斷點(diǎn)后處理異常,這和前一個操作 是對應(yīng)的;記錄信息(Log message),通過這個斷點(diǎn)時記錄一條事件日志信息,你可以在事件日志(Event Log)中查看這條信息;表達(dá)式求值(Eval expression):對指定的一個
9、表達(dá)式進(jìn)行求值,并且可以通過記錄結(jié)果(Log result)把這個結(jié)果記錄在日志中;禁止/允許組(Enable group/Disable group):通過這個斷點(diǎn)以后禁止或者允許其它的組,由 此可以控制其它斷點(diǎn)的狀態(tài)。在Delphi中除了上述的顯式斷點(diǎn)以外,還提供了隱式斷點(diǎn):運(yùn)行到光標(biāo)(Run to cursor)和 運(yùn)行到返回(Run until return)0運(yùn)行到光標(biāo)是讓程序到當(dāng)前光標(biāo)所在程序行,相當(dāng)于你在當(dāng)前光標(biāo)位置設(shè)置了一個斷點(diǎn)。這 是一次性斷點(diǎn),并且如果在到達(dá)這里前遇到了其它斷點(diǎn),會停止在那個斷點(diǎn)的地方,同時取 消了這個臨時斷點(diǎn)。運(yùn)行到返回是用于過程和函數(shù)中,運(yùn)行到過程和函數(shù)
10、退出的位置,使得可以迅速返回上層調(diào) 用程序。5.變量查看(Watch) /檢查(Inspect)在程序暫停的時候你可以用Watch查看某個變量,按Ctrl+F7 (Add Watch,添加查看)可以 在查看列表(Watch List)中增加一個變量。在Watch中你可以查看變量或者表達(dá)式,指定 數(shù)據(jù)的格式,甚至可以指示Delphi調(diào)用某些函數(shù),顯示函數(shù)的返回值。有一種快速查看模式,稱為Local Variables (局部變量),按Ctrl+Alt+L能夠顯示這個窗體, 里面是當(dāng)前過程或函數(shù)的局部變量。Delphi還支持一種臨時的求值模式(Evaluate/Modify),按Ctrl+F4顯示
11、求值框,你可以在這 里輸入一個變量或者表達(dá)式,計(jì)算其數(shù)值,對于變量還可以在運(yùn)行時改變它的值,這樣如果 你已經(jīng)發(fā)現(xiàn)數(shù)據(jù)有錯,你可以修改它,讓程序繼續(xù)運(yùn)行下去,就像這個數(shù)值就是程序得出的 一樣。檢查(Inspect),是一種可以進(jìn)一步查看變量信息的手段。把光標(biāo)放在某個變量前,按Alt+F5 顯示檢查窗。在這里可以看到有關(guān)這個變量的詳細(xì)信息,包括:類型、值等,這對于類類型、 記錄類型尤其有用。和Evaluate/Modify一樣,你也可以改變這些值。調(diào)用堆棧(Call Stack)對于某些遞歸調(diào)用和復(fù)雜的嵌套調(diào)用來說,使用Call Stack功能能夠方便的檢查函數(shù)的調(diào)用 情況。按Ctrl+Alt+S
12、可以顯示這個窗體,在最上面的是當(dāng)前過程或函數(shù),在最下面的往往是你的主 程序。例如:TForm1.Button1Click(?);Project1這表示Project1調(diào)用了方法TForm1.Button1Click,由于其參數(shù)是一個對象(Sender:TObject),不能求值,所以用?表示。雙擊Project1可以看出在什么地方調(diào)用了 TForm1.Button1Click (如果調(diào)用點(diǎn)沒有源代碼,則顯示有源代碼的第一行)。高級調(diào)試功能上面所說的是常規(guī)的調(diào)試功能,Delphi還提供了很多高級調(diào)試功能。線程狀態(tài)(Thread Status):顯示當(dāng)前程序中有多少線程在運(yùn)行,各線程的狀態(tài)是什么?參 數(shù)是什么?模塊(Modules):顯示當(dāng)前進(jìn)程使用了多少模塊,其名稱和地址是多少?這對于調(diào)試DLL 時很有用。CPU/FPU:在匯編語言層次顯示代碼,這能夠更加精確地觀察程序
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 桶裝水合作合同
- 加油站場地租賃合同
- 股權(quán)轉(zhuǎn)讓合同擔(dān)保合同
- 建設(shè)工程合同款支付保證保險條款
- 材料運(yùn)輸買賣合同
- 專業(yè)檔案管理與咨詢服務(wù)合同
- 聘任常年法律顧問合同
- 與供應(yīng)商的合同評審流程指南
- 湖南人文科技學(xué)院《現(xiàn)代教育技術(shù)在中小學(xué)教學(xué)中的應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 荊州學(xué)院《機(jī)能實(shí)驗(yàn)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年中考語文模擬試卷(含答案解析)
- 2025版校園樂器銷售代理與服務(wù)協(xié)議3篇
- DB11-T 1004-2023 房屋建筑使用安全檢查評定技術(shù)規(guī)程
- 2024-2025年天津河西區(qū)七年級上學(xué)期期末道德與法治試題(含答案)
- 預(yù)制板粘貼碳纖維加固計(jì)算表格
- 2025年海南農(nóng)墾自然資源開發(fā)集團(tuán)有限公司筆試題
- 2023CSCO兒童及青少年白血病診療指南
- 醫(yī)療垃圾轉(zhuǎn)運(yùn)流程
- 礦棉板模板施工合同
- DB31∕T 1148-2019 水量計(jì)量差錯的退補(bǔ)水量核算方法
- 2025蛇年元旦晚會
評論
0/150
提交評論