5

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

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

Delphi 2009 を使用しています。

4

2 に答える 2

13

OutputDebugStringあなたのプロジェクトには への呼び出しがいくつありますか? 「ファイル内を検索」ダイアログを使用してそれらをすべて見つけることができます。数が多すぎなければ問題はありません。

それ以外の場合は、もちろん、検索を使用して置換し、すべてOutputDebugString(をに置換できraise Exception.Create(ます。

関数を書くこともできます

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

プロジェクト内の他のすべてのユニットで使用されるユニットで。この新しいユニットのみがリストWindows.pasの後に宣言されているuses場合、Windows.pas の代わりにこの新しい関数が使用されます。

アップデート

はい、Windows.pas 内にブレークポイントを配置できます。まず、プロジェクトで [プロジェクト オプション] に移動し、[デバッグ] で [デバッグ DCU を使用] を選択します。次に、Windows.pas に移動して、30769 行目にブレークポイントを配置します。

procedure OutputDebugString; external kernel32 name 'OutputDebugStringW';
于 2010-11-23T17:29:21.250 に答える
7
  • アプリケーションを実行します。
  • 一時停止します。
  • ビュー/デバッグ ウィンドウ/モジュール ウィンドウを開きます。
  • kernel32.dll を検索します。ダブルクリックします。
  • OutputDebugStringA を検索します。ダブルクリックします。
  • CPU ウィンドウが開きます。最初の行にブレークポイントを設定します。
  • OutputDebugStringW を検索します。ダブルクリックします。
  • CPU ウィンドウが開きます。最初の行にブレークポイントを設定します。

終わり。

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

于 2010-11-27T03:23:27.903 に答える