2010-11-23 14 views
5

「T」を印刷するアプリケーションで「不正な」OutputDebugString呼び出しがありますが、それを見つけることはできません。DelphiでOutputDebugString呼び出しをデバッグする

何とかOutputDebugString -functionにブレークポイントを設定し、どこから呼び出されているのか確認できますか?

私は、Delphi 2009

答えて

13

プロジェクトにどのように多くのコールOutputDebugStringにあるを使用していますか? 「ファイルで検索」ダイアログを使用してすべてを見つけることができます。また、あまりにも多くない場合は、問題はありません。

そうでなければ、OutputDebugString(をすべてraise Exception.Create(に置き換えて置き換えることができます。

また、プロジェクト内のすべての他のユニットで使用される単位で機能

procedure OutputDebugString(const Str: string); 
begin 
    raise Exception.Create(Str); 
end; 

を書くことができます。 usesリストにWindows.pasの後にこの新しいユニットのみが宣言されている場合、この新しい関数はWindows.pasの代わりに使用されます。

更新

はい、Windows.pasにブレークポイントを配置できます。まず、プロジェクトで[プロジェクトオプション]に移動し、[デバッグ]の[デバッグDCUを使用]を選択します。そして、あなたはWindows.pasにに移動し、ライン30769にブレークポイントを置くことができます。

procedure OutputDebugString; external kernel32 name 'OutputDebugStringW'; 
+1

プロジェクトとコンポーネントの間に広がり過ぎています。自分のコードや第三者のコードからメッセージが来ているかどうかはわかりません。 – Harriv

+0

はい、デバッグDCUはそれを行います。今すぐ条件を設定する方法を理解する必要があります。 – Harriv

+2

あなたのコードではないが、(間接的に)あなたが使用しているいくつかのユニットがOutputDebugStringAに行くこともできます。 – Remko

7
  • は、アプリケーションを実行します。
  • 一時停止します。
  • 開いているビュー/デバッグウィンドウ/モジュール ウィンドウ。
  • kernel32.dllを検索します。ダブルクリックします。
  • OutputDebugStringAを検索します。ダブル をクリックします。
  • CPUウィンドウが開きます。 非常に最初の行にブレークポイントを設定します。
  • OutputDebugStringWを検索します。ダブル をクリックします。
  • CPUウィンドウが開きます。 非常に最初の行にブレークポイントを設定します。

完了。

これで、アプリケーションからOutputDebugStringを呼び出すと、ブレークポイントでブレークします。ブレークポイントのプロパティのログをオンにして、コールスタックをログすることもできます。

関連する問題