フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: 中レベルデバッグ方法 (OutputDebugString)
DEKO
管理者
投稿数: 2693
中レベルデバッグ方法 (OutputDebugString)
on: 2013/04/21 04:15 Sun

OutputDebugString() を使えば、IDE のイベントログ ([表示 | デバッグ | イベントログ]) に任意の文字列を出力する事ができます。
例えば、イベントログに "Hello, World." を出力したい場合には以下のようなコードを記述します。

  OutputDebugString(PChar('Hello, World.'));

 
とっても簡単ですね。これを実行すると、イベントログには以下のように表示されます。

さて、IDE 上でなければデバッグ出力できない訳ではありませんで、何でもいいので Windows 用のデバッガを用意すれば大抵のデバッガは OutputDebugString() で吐かれた文字列を表示する事ができます。

OutputDebugString() をトレースするだけなら、インストール不要で使える DebugView がお手軽です。

[DebugView]
http://technet.microsoft.com/ja-jp/sysinternals/bb896647.aspx

DebugView は "管理者として実行" で実行し、

OS が 32bit の場合:
[Capture | Capture Win32] にチェックが入っているか確認する。
OS が 64bit の場合:
[Capture | Capture Global Win32] にもチェックが入っているか確認する。

 
キャプチャ対象のチェックを確認してから監視対象のアプリケーションを起動します。

  • アプリケーションはデバッグビルドである必要はありません。
  • 32bit / 64bit アプリケーションいずれも取得できます。
  • Delphi IDE を含め、DebugView の他にデバッガが起動しているとキャプチャできない事があります。
  • リモートデスクトップ操作からだとキャプチャできないかもしれません。

お客さんトコにノート PC 持ち込めないとか、リモートデバッガすら利用できない時には役に立つかも知れません。転ばぬ先の OutputDebugString()

IDE 上での OutputDebugString() を使ったデバッグ手法に関しては 第21回 エンバカデロ・デベロッパーキャンプ【T2】「実践!Delphiデバッグテクニック」 を参照して下さい。

[実践!Delphiデバッグテクニック]
資料: http://edn.embarcadero.com/jp/article/images/42116/T2_updated.pdf
サンプル: http://cc.embarcadero.com/jp/item/28783
動画1: http://www.youtube.com/watch?v=h-x9-0cKPTs
動画2: http://www.youtube.com/watch?v=tn6q94g4pfs

DEKO
管理者
投稿数: 2693
Re: 中レベルデバッグ方法 (OutputDebugString)
on: 2013/04/21 04:30 Sun

OutputDebugString() はWindows API なので、OS X のデバッグには使えません。

procedure DebugPrint(const s: string);
begin
{$IFDEF MSWINDOWS}
OutputDebugString(PChar(s));
{$ELSE}
Writeln(s);
{$ENDIF}
end;

 
このような関数を使えば、Mac OS X の場合には PAServer のコンソールに出力するようになるハズです。

DEKO
管理者
投稿数: 2693
Re: 中レベルデバッグ方法 (OutputDebugString)
on: 2013/04/21 13:53 Sun

ん?snail3 さん投稿消されました?
私がここで書いた手法は snail3 さんが書かれた手法を代替するものではないので、消さないで欲しいのですが…。

OutputDebugString() は手軽である反面、

  • 大量のデバッグログを処理するには向かない (途中にフィルタを挟めないので高速で流れていってしまう)。
  • 何かしらのデバッガを必要とする。
  • デバッガで必ずメッセージを取得できるとは限らない (特に IDE を使わない場合)。
  • (確か) Personal / Starter 版等にはイベントログウィンドウの機能がない。

という欠点もあるのです。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.03 sec.