12

Delphi IDE をデバッグする詳細な手順は何ですか?

他の投稿から、プロジェクトを作成し、プロジェクトのデバッガー設定で、プロジェクトの「ホスト アプリケーション」を Delphi ( C:\Program Files\Borland\BDS\3.0\Bin\bds.exe) に設定する必要があることを理解しています。次に、プロジェクトをデバッガで (F9キーを押して) 実行すると、Delphi IDE の 2 番目のインスタンスが表示されます。

上記の手順を実行することができました。しかし、プロジェクトをデバッガ モードで実行すると、Delphi IDE が開いている 2 番目のインスタンスが表示されません。

動機

私がソースコードを持っているVCLコンポーネントがあり、ビルド、コンパイル、インストールがうまくいきます。ただし、プロジェクト内のフォームに配置すると、フォームを閉じると Delphi がハングします。だから、フォーム上にこのコンポーネントがあると、Delphi が終了時にフリーズする理由を知りたいのです。(プロジェクトを閉じるときに、設計時にハングします)。

4

4 に答える 4

10

あなたのプロジェクトはおそらく EXE タイプです。EXE タイプのプロジェクトはホスト アプリケーションを必要としないため、設定は無視され、他の IDE は起動されません。少なくとも、プロジェクトを DLL タイプにする必要があります。これにより、2 つ目の IDE が起動しますが、あまり役に立ちません。

あなたが言及した手法は、通常、設計時のパッケージプロジェクトをデバッグするために使用されます。設計時パッケージ プロジェクトを作成して IDE にインストールし、プロジェクトのホスト アプリケーションを IDE に設定し、いくつかのブレークポイントを設定してヒットF9すると、Delphi の 2 番目のコピーが開始されます。

2 つ目のコピーを自分で手動で開始し、[実行] メニューの [プロセスにアタッチ] コマンドを使用して、Delphi IDE を「デバッグ」することもできますが、コードを簡単に見つけることができないため、あまり役に立ちません。ブレークポイントを設定します。

于 2012-03-10T05:39:15.987 に答える
2

最初に、ハングが実行時と設計時に発生するかどうかを確認します。ランタイム コードでコンポーネントを動的にインスタンス化します。それでもハングが発生する場合は、単一のデバッガ インスタンスを使用して、通常どおりコンポーネントのソース コードをステップ実行できます。動作が IDE プロセス内でのみ発生する場合を除き、実行中の IDE インスタンスにデバッグする必要はありません。

于 2012-03-11T00:27:07.017 に答える
1

最初にコンポーネント パッケージを見つけて開き、ランタイムとデザインタイムの両方のパッケージ ビルド オプションを [リリース] から [デバッグ] に変更し (まだ変更されていない場合)、再ビルドします。

次に、両方のパッケージ プロジェクトを含むプロジェクト グループを保存します (1 つの設計時と 1 つのランタイム。一部の例外的なケースでは、設計時とランタイムが 1 つにまとめられた 1 つのパッケージしかありません)。

次に、手順に従って 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" のような機能を追加するために、コンポーネントに損傷を与える必要がないという利点があります。

于 2012-03-10T16:42:11.300 に答える
1

Delphi の 2 番目のインスタンスが起動しない場合は、bds.exe へのパスが正しくありません。

于 2012-03-10T23:53:03.737 に答える