簡體   English   中英

如何調試Delphi IDE?

[英]How to debug Delphi IDE?

有關如何調試Delphi IDE的詳細步驟是什么?

我從其他帖子中了解到,需要創建一個項目,在項目的調試器設置中,將項目的“主機應用程序”設置為Delphi( C:\\Program Files\\Borland\\BDS\\3.0\\Bin\\bds.exe ) 。 然后,當項目在調試器中運行時(通過按F9鍵),應該出現Delphi IDE的第二個實例。

我已設法完成上述步驟。 但是,當我在調試器模式下運行項目時,我沒有看到任何Delphi IDE開放的第二個實例。

動機

有一個VCL組件,我有源代碼,可以構建,編譯和安裝。 但是,當它放在項目中的表單上時,Delphi會在您關閉表單時掛起。 所以,我想找出為什么Delphi在表單上使用此組件退出時凍結的原因。 (它在設計時掛起,當關閉項目時)。

您的項目很可能是EXE類型。 EXE類型的項目不需要主機應用程序,因此忽略該設置,不啟動其他IDE。 至少,您應該使您的項目成為DLL類型:它將啟動第二個IDE,但它不會非常有用。

您提到的技術通常用於調試您的設計時包項目。 創建一個設計時包項目,將其安裝到IDE中,將項目的主機應用程序設置為IDE,設置一些斷點,點擊F9,然后啟動第二個Delphi副本。

你也可以在“調試”德爾福IDE通過自己手動啟動的第二個副本,然后使用“附加到進程”,從“運行”菜單命令,但是這不會是非常有用的,因為你不能很容易地找到你的代碼設置斷點。

我首先檢查是否在運行時以及在設計時發生掛起。 在運行時代碼中動態實例化組件。 如果發生掛起,則可以使用單個調試器實例逐步執行組件的源代碼。 除非行為僅在IDE進程中發生,否則無需調試到正在運行的IDE實例。

首先找到並打開組件包,將運行時和設計時包編譯選項從Release發送到Debug,如果它們還沒有,則重建。

然后保存一個包含兩個包項目的項目組(一個設計時和一個運行時,在某些特殊情況下,人們只有一個包,設計時+運行時一個)。

然后按照步驟將BDS.exe設置為主機應用程序。

我很想將一些OutputDebugString消息添加到您知道已損壞的組件中:

構造函數:

constructor TMyComponent.Create(AOwner:TComponent);
begin
    inherited;
    // other stuff.
    OutputDebugString('Created TMyComponent');
end;

析構函數:

destructor TMyComponent.Destroy(AOwner:TComponent);
begin
    OutputDebugString('Destructor TMyComponent starts');
    inherited;
    // other stuff.
    OutputDebugString('Destructor TMyComponent finish');
end;

TMyComponent所在單位的終結部分:

 finalization
      OutputDebugString('Finalization section for Unit MyComponentUnit');
 end.

查看delphi調試器中的輸出事件頁面,您可以確定代碼獲得了多遠,即使您沒有獲得可以相當准確地定位缺陷的異常斷點,您也可以使用OutputDebugString消息如上所述,或者你甚至可以在delphi中設置Non Breaking Breakpoints ,並關閉斷點屬性“Break on exception”,而是設置一個“日志消息”。 這些消息(斷點消息)的好處是不需要對組件造成任何損害,以便為調試工具包添加一些簡單的“print-statement-debug”功能。

如果Delphi的第二個實例沒有啟動,那么你有bds.exe的路徑不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM