Delphi應用程序的調試(六)步進式代碼調試


步進式代碼調試(Stepping Through Your Code)

步進式代碼調試是最基本的調試操作之一,但仍要在此講述。人們常常容易犯只見樹木不見森林的錯誤。經常復習基本的知識有助於讀者了解以前不知道的東西。

調試溝槽符號(Debugging Gutter Symbols)

在開始講述之前,先要說說在調試會話期間出現在Code Editor溝槽中的符號。在之前的講解中講過,當用戶在一個代碼行上設置一個斷點,溝槽中就會出現一個紅色的圓圈。

image

溝槽中還有一個綠色箭頭符號指示執行點所在位置。如下圖:

image

有一點沒有講過,就是在溝槽中與某些代碼行對應的位置上有一些藍色小點。這些藍點指示實際產生匯編代碼的源代碼。如下圖,調試器停在一個斷點處時的Code Editor。其中有指示產生匯編代碼的源代碼行的藍色小點,也有指示執行點的箭頭符號,還有斷點符號。斷點符號上的復選標志表示該斷點是一個有效斷點。

image

仔細觀察上面的代碼,不帶小點的代碼行不產生任何編譯代碼。例如上面的:

var
  S: string;
  X: Integer;

為什么這幾行不產生代碼呢?因為它們是變量聲明行。再看一行:

  X := 20;

為什么這一行不產生代碼呢?這是因為代碼優化的緣故。編譯器在編譯代碼時會發現變量X未實際使用過,從而將它優化掉。再看下面幾行:

  {$IFNDEF WIN32}
  S := 'Something's very wrong here...';
  {$ENDIF}
編譯器不會編譯器偽指令之間的源代碼行進行編譯,因為符號WIN32定義在一個Delphi7的程序中。編譯器偽指令{$IFNDEF WIN32}告訴編譯器:如果目標平台不是32位Windows,就編譯這一行。因為Delphi7是32位編譯器,所以不編譯這行代碼。如果是在Delphi1(16位環境)中,這行源代碼就要編譯。

步進式調試與跟蹤(Step Over and Trace Into)

好了,再回到“步進式調試代碼”上來。當程序在斷點處暫停時,用戶可以做很多事情:在Watch List中設置要監視的變量,用Debug Inspector檢查對象或查看調用棧。還可以步進式調試代碼,當每一個代碼行執行時,監視變量和對象的變化。

當繼續步進式調試時,會看到源代碼中下一步要執行的源代碼以藍色加亮顯示。如下圖:

image

如果打開了Watch List窗口和Debug Inspector窗口,它們就會隨着每一代碼的執行而被更新。在Watch List和Debug Inspector窗口中能立即看到變量和對象的變化。IDE調試器有兩個主要步進命令:Step Over和Trace Into。

1、Step Over

Step Over是指執行一行源代碼,並在其下一行暫停。“Step Over”在此有點用詞不當,因為從字面上理解,是跳過一個源代碼行的意思。但是,此處不能從字面上去理解Step Over。實際上,Step Over是指執行當前源代碼行,如果該行代碼調用了函數或過程,則所調用的函數或過程也要完整地執行完。例如,一個程序的某行代碼調用一個方法,在該代碼行上設置一個斷點;當用調試器Step Over該行代碼時,調試器將執行完所調用的方法並停在下一行代碼上。

要用Step Over調試程序,可以按F8鍵,也可以從主菜單上選【Run | Step Over】,或從工具欄中選擇image

Note

當用戶步進式調試程序中的各個源代碼單元時,Code Editor會自動裝入並顯示所需的源代碼單元(如果這些單元還未打開)。

2、Trace Into

當用戶在步進式調試代碼過程中碰到函數或過程時,Trace Into命令允許用戶跟蹤該函數或過程的執行。Trace Into不是像Step Over那樣執行完函數或過程后返回到下一行,而是將執行點放置到所調用函數或過程的第一行源代碼上,然后用戶可以使用Step Over或Trace Into來逐步步進調試該函數或過程。Trace Into的快捷鍵為F7。

當用戶檢查完變量以及做完其他要做的調試工作后,可點擊Run按鈕再運行該程序,程序將會正常運行,直至碰到下一個斷點。

Note

如果用戶有專業版Delphi或客戶/服務器版Delphi,那就可以跟蹤VCL源代碼。當碰到一個VCL方法時,Trace Into允許用戶進入該方法的VCL源代碼,用戶可查看任何需要查看的變量。必須將VCL源代碼所在目錄的路徑添加到Project Options對話框(Directories/Conditionals頁面)上的Search Path字段中,如下圖:

image

OK確認之后要重新編譯、鏈接。跟蹤VCL源代碼對大多數編程人員可能意思不大;但對於經驗豐富的程序員,它是非常有用的。

3、Trace To Next Source Line

另外一個調試命令是“Trace To Next Source Line”快捷鍵是【Shift + F7】。可從主菜單選擇【Run | Trace to Next Source Line】菜單項打開該命令。

image

用戶不會頻繁使用這個命令,特別是調試和Windows編程還不太熟悉的用戶。有些Windows API函數使用回調函數,意思是指Windows函數調用用戶的函數來執行一些操作。

如果執行點在一個Windows API函數上,而這個函數使用一個回調函數,則使用Trace to Next Source Line命令會跳過執行點到回調函數的第一行。其效果類似於Trace Into(但在某些特定情況下,兩者的效果卻又完全不同。)。

當步進式調試一個方法時,執行點最終要到達該方法的end語句。若所調試的方法在其運行結束后將控制權返回給Windows,則當執行點在方法的end語句時按F8鍵,可退出該方法並把控制返回給正調試的程序。此時不能確定程序會不會再暫停,因為IDE具有輸入焦點。要切回到該程序,將其激活就可以了。(點擊其在Windows任務欄上的按鈕)。

步進式代碼調試是一個基本的調試技術,用戶在調試程序時要經常使用這一技術,因此用戶要記住有關的鍵盤快捷鍵:

【F7】Trace Into

【F8】 Step Over

【F9】 Run


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM