Delphi源碼調(diào)試方法_第1頁
Delphi源碼調(diào)試方法_第2頁
Delphi源碼調(diào)試方法_第3頁
Delphi源碼調(diào)試方法_第4頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

1、Delphi調(diào)試概述除非你的程序只有幾行,否則幾乎不可能一次寫成,因此調(diào)試就非常必要。然而許多初學者 不知道如何進行調(diào)試,寫完程序就運行,發(fā)現(xiàn)結(jié)果不對再看代碼,這樣覺得非常吃力。這里, 簡單介紹一下Delphi所提供的調(diào)試功能。1.語法檢查(Syntax Check)Delphi提供了語法檢查的功能,這個功能和正常編譯很相似,同樣也會給出各類錯誤和警告 信息,但是不會生成代碼。必須重視Delphi給出的任何信息,很多簡單的錯誤就能夠在這個階段被發(fā)現(xiàn)。Delphi的編譯 信息分為4類:Fault (故障),Error (錯誤),Warning (警告)和Hint (提示)。Fault是指 導致編

2、譯程序不能繼續(xù)工作的錯誤,例如內(nèi)存溢出等;Error是指發(fā)現(xiàn)用戶程序不符合某些 規(guī)定而導致不能按照用戶程序的要求進行處理;Warning是指用戶程序使用了某些不符合規(guī) 定的形式,但是并不影響編譯程序生成目標文件;Hint是指編譯程序?qū)τ脩舫绦虻哪承┬问?提出了懷疑。前兩類信息是必須要解決的,否則你不能運行你的程序,但是往往會有很多人忽略后兩種信 息。然而,這些信息卻是非常重要的。對于下面這個代碼,編譯程序?qū)霈F(xiàn)一個Warning:vara,b:Integer;begin.if a 100 thenif ab then begin.end;end.end.編譯程序會告訴你,在.(句號)后面的內(nèi)

3、容被忽略了,實際上你會發(fā)現(xiàn)你漏了一個begin, 同時將最后第二個end后面的;”(分號)誤寫成.(句號)了。再看看下面的代碼:vara,b:Integer;beginb:=a+1;end;編譯程序會給出一個Hint,告訴你a尚未被初始化,通常沒有被初始化的變量其內(nèi)容是不確 定的。由上可見,編譯程序可以對你的程序進行初步的調(diào)試,協(xié)助你排除一些故障。但是僅僅這樣是完全不夠的,需要更加強大的調(diào)試能力才能勝任更加復雜的程序調(diào)試任務。2.啟動、暫停、中止集成調(diào)試程序最基本、最重要的調(diào)試手段包括:單步跟蹤、斷點、變量觀察、堆棧檢查等。所有這些功能 在Delphi的集成調(diào)試程序中都能提供。當你按下F9(C

4、ompile and Run,編譯并運行)一個程序時,就已經(jīng)啟動了 Delphi的集成調(diào) 試程序,而按下Ctrl+Break(Program Pause,程序暫停)時則會暫停被調(diào)試程序返回到集成 調(diào)試程序中去,再次按下F9會從暫停地地方繼續(xù)執(zhí)行,而Alt+F2(Program Reset,程序復 位)則會完全中止被調(diào)試程序的執(zhí)行,返回集成調(diào)試程序中去。3單步跟蹤(Step)所謂單步跟蹤是指一行一行地執(zhí)行程序,每執(zhí)行一行語句后就停下來等待指示,這樣你就能 夠仔細了解程序的執(zhí)行順序,以及當時的各種狀況。注意:雖然Object Pascal允許在一行內(nèi)書寫任意多的語句,但是所有的單步跟蹤都以行”為

5、單位,因此為了便于調(diào)試,主張在一行內(nèi)只寫一條語句,否則會給你帶來很大的麻煩。單步跟蹤可以分為Step Over (跳過)、Trace Into (跟蹤進入)和Trace to Next Source Line (跟 蹤到下一條源代碼行)。Step Over和Trace Into都是執(zhí)行一行語句,差別在于遇到過程和函數(shù)時Trace Into將會進入 過程和函數(shù),而Step Over不會,而只會把過程和函數(shù)作為一條語句執(zhí)行。當使用Ctrl+Break暫停程序時,程序不一定停在你的源代碼位置上,而可能是在操作系統(tǒng)或 者其它模塊中,此時集成調(diào)試程序會出現(xiàn)一個CPU窗口(CPU Window),用匯編指

6、令的形式 顯示當前的內(nèi)容,可以用Trace to Next Source Line繼續(xù)執(zhí)行程序,直到程序執(zhí)行到第一條有 源代碼的地方。4 斷點(Breakpoint)斷點是調(diào)試中非常重要的一個手段。由于在執(zhí)行到某些代碼前需要執(zhí)行許多其它代碼,不可 能用單步跟蹤一條一條執(zhí)行過來,這時只要在需要暫停的地方設(shè)置一個斷點,然后讓程序運 行,當執(zhí)行到這個斷點位置時不需要用戶干預就會暫停并返回集成調(diào)試程序。Delphi提供了豐富的斷點功能,包括:源代碼斷點、指令斷點、數(shù)據(jù)斷點等。源代碼斷點(Source Breakpoint)是指在你的源程序中設(shè)置斷點,指令斷點(Address Breakpoint) 是

7、指在某機器指令處設(shè)置斷點,數(shù)據(jù)斷點(Data Breakpoint)是指當寫入某變量時暫停用戶 程序。所有的斷點都可以設(shè)置更詳細的屬性,包括:條件、通過次數(shù)、組、高級操作等。條件(Condition)是指觸發(fā)斷點的條件,例如你可以寫:a=10,表示當a等于10時在這個 斷點位置暫停; 通過次數(shù)(Pass Count)是指即使符合條件,也需要執(zhí)行這些次數(shù)才N暫停,例如在某斷點 設(shè)置通過次數(shù)為5,則表示當?shù)?次通過這個斷點時才暫停程序,當然,如果有條件存在的 話還要符合相當次數(shù)的條件;組(Group)是指一組斷點,你可以用一個名字來標記許多斷點,這樣你可以用禁止或允許 組(Disable Grou

8、p/Enable Group)來同時打開或禁止多個斷點。高級操作是指和每個斷點相關(guān)的一些行為(Action),具體如下:中斷(Break):中斷程序,這是默認操作。忽略后續(xù)異常(Ignore subsequent exceptions):通過這個斷點后忽略所有異常(exceptions); 處理后續(xù)異常(Handle subsequent exceptions):通過這個斷點后處理異常,這和前一個操作 是對應的;記錄信息(Log message),通過這個斷點時記錄一條事件日志信息,你可以在事件日志(Event Log)中查看這條信息;表達式求值(Eval expression):對指定的一個

9、表達式進行求值,并且可以通過記錄結(jié)果(Log result)把這個結(jié)果記錄在日志中;禁止/允許組(Enable group/Disable group):通過這個斷點以后禁止或者允許其它的組,由 此可以控制其它斷點的狀態(tài)。在Delphi中除了上述的顯式斷點以外,還提供了隱式斷點:運行到光標(Run to cursor)和 運行到返回(Run until return)0運行到光標是讓程序到當前光標所在程序行,相當于你在當前光標位置設(shè)置了一個斷點。這 是一次性斷點,并且如果在到達這里前遇到了其它斷點,會停止在那個斷點的地方,同時取 消了這個臨時斷點。運行到返回是用于過程和函數(shù)中,運行到過程和函數(shù)

10、退出的位置,使得可以迅速返回上層調(diào) 用程序。5.變量查看(Watch) /檢查(Inspect)在程序暫停的時候你可以用Watch查看某個變量,按Ctrl+F7 (Add Watch,添加查看)可以 在查看列表(Watch List)中增加一個變量。在Watch中你可以查看變量或者表達式,指定 數(shù)據(jù)的格式,甚至可以指示Delphi調(diào)用某些函數(shù),顯示函數(shù)的返回值。有一種快速查看模式,稱為Local Variables (局部變量),按Ctrl+Alt+L能夠顯示這個窗體, 里面是當前過程或函數(shù)的局部變量。Delphi還支持一種臨時的求值模式(Evaluate/Modify),按Ctrl+F4顯示

11、求值框,你可以在這 里輸入一個變量或者表達式,計算其數(shù)值,對于變量還可以在運行時改變它的值,這樣如果 你已經(jīng)發(fā)現(xiàn)數(shù)據(jù)有錯,你可以修改它,讓程序繼續(xù)運行下去,就像這個數(shù)值就是程序得出的 一樣。檢查(Inspect),是一種可以進一步查看變量信息的手段。把光標放在某個變量前,按Alt+F5 顯示檢查窗。在這里可以看到有關(guān)這個變量的詳細信息,包括:類型、值等,這對于類類型、 記錄類型尤其有用。和Evaluate/Modify一樣,你也可以改變這些值。調(diào)用堆棧(Call Stack)對于某些遞歸調(diào)用和復雜的嵌套調(diào)用來說,使用Call Stack功能能夠方便的檢查函數(shù)的調(diào)用 情況。按Ctrl+Alt+S

12、可以顯示這個窗體,在最上面的是當前過程或函數(shù),在最下面的往往是你的主 程序。例如:TForm1.Button1Click(?);Project1這表示Project1調(diào)用了方法TForm1.Button1Click,由于其參數(shù)是一個對象(Sender:TObject),不能求值,所以用?表示。雙擊Project1可以看出在什么地方調(diào)用了 TForm1.Button1Click (如果調(diào)用點沒有源代碼,則顯示有源代碼的第一行)。高級調(diào)試功能上面所說的是常規(guī)的調(diào)試功能,Delphi還提供了很多高級調(diào)試功能。線程狀態(tài)(Thread Status):顯示當前程序中有多少線程在運行,各線程的狀態(tài)是什么?參 數(shù)是什么?模塊(Modules):顯示當前進程使用了多少模塊,其名稱和地址是多少?這對于調(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論