デバッグ出力の方法
|
85 |
DebugOutput |
動作確認 |
Delphi2007 |
更新日 |
2008/03/05(水) |
いろんな方法がありますし
それぞれの方法を適宜使いこなしてください。
◆デバッグ時に変数の内容などを
コンソールに出力する方法があります。
*.DPR や *.PAS のソースのどこかに
{$APPTYPE CONSOLE}
というコンパイル指令を書いておくと
プロジェクト起動時にコンソール画面
(黒いDOSプロンプト画面)が立ち上がります。
もしくはイベントなどで
AllocConsole;
という命令を呼び出すとそのときに
コンソール画面が立ち上がります。
そこで
Write(変数);
Writeln(変数);
という標準出力命令で値を表示させる事が出来ます。
────────────────────
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
S: String;
begin
AllocConsole;
i := 10;
S := 'あいうえお';
Writeln(i);
Writeln(S);
end;
────────────────────
◆以前のVersionのDelphiのProfessional版以上なら
OutputDebugStringというAPI関数を書けば
IDEのイベントログWindowに出力結果が表示されます。
※TurboDelphi等のProfessional版以下の最近のものに
この機能が消されているかどうかは不明です。
────────────────────
procedure TForm1.Button2Click(Sender: TObject);
begin
OutputDebugString('OutputDebugStringで文字を出力');
end;
────────────────────
結果は次のようになります。
ODS: OutputDebugStringで文字を出力 プロセス Project1.exe ($47C)
◆IDEを使えないデバッグなどにはメモ帳やEmEditorなどの
外部のエディタに文字列を出力してみましょう。
起動しているメモ帳にメッセージを送って文字列を表示させます
────────────────────
{-------------------------------
// デバッグ出力をメモ帳やEmEditorに貼り付ける
備考: uses Messagesが必要
//------------------------------}
var
hwndNotepadEdit: HWND;
{ユニット変数にする事で再検索の必要がなくなる}
procedure DebugPrintNotepad( S:string );
var
hwndNotepad: HWND;
begin
if not isWindow( hwndNotepadEdit )
then begin
hwndNotepad := FindWindow( 'Notepad','無題 - メモ帳' );
hwndNotepadEdit := FindWindowEx( hwndNotepad,0,'Edit',nil );
end;
if not isWindow( hwndNotepadEdit ) then exit;
SendMessage( hwndNotepadEdit,EM_REPLACESEL,0,LPARAM( PChar( S+#13#10 )));
end;
var
hwndEmEditorView: HWND;
procedure DebugPrintEmEditor( S:string );
var
hwndEmEditor: HWND;
begin
if not isWindow( hwndEmEditorView )
then begin
hwndEmEditor := FindWindow( 'EmEditorMainFrame3','無題 - EmEditor' );
hwndEmEditorView := FindWindowEx( hwndEmEditor,0,'EmEditorView',nil );
end;
if not isWindow( hwndEmEditorView )
then begin
hwndEmEditor := FindWindow( 'EmEditorMainFrame3','無題 * - EmEditor' );
hwndEmEditorView := FindWindowEx( hwndEmEditor,0,'EmEditorView',nil );
end;
if not isWindow( hwndEmEditorView ) then exit;
SendMessage( hwndEmEditorView,EM_REPLACESEL,0,LPARAM( PChar( S+#13#10 )));
end;
//------------------------------
────────────────────
メモ帳やEmEditorを起動しておき
DebugPrintNotepad と DebugPrintEmEditor 関数に文字列を渡すと
それぞれのエディターに文字列が出力されます。
他のエディタに対応させたい場合、
エディタのクラス名とWindowの名前を調べて
同様のコードを書けばよいでしょう。
Delphi付属のツール WinSight や
VisualStudo付属のツール Spy++ を使って調べるとよいでしょう。
FindWindowのHELPをみると
HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
となっています。
その WinSight や Spy++ にて
メモ帳を見ると 'NotePad' や 'Edit' と書かれていて
EmEditor の同じ項目には 'EmEditorMainFrame3' や 'EmEditorView' と
書かれているので、上記のソースのように指定してください。
EM_REPLACESEL メッセージに対応していないエディタは場合は
SendMessageで送っても動作しませんので、注意してください。
◆これらのデバッグ出力命令は
{$IFOPT D+}
OutputDebugString('xxxx の処理');
{$ENDIF}
このようにしておくと
[プロジェクト オプション]-[コンパイラ]タブ-[デバッグ]-[デバッグ情報]
のチェックのOn/Offによってコードがコンパイルされたりされなかったり
ということを切り替えることができます。
HELPのキーワード『$D』項目や『$IFOPT』項目も参照すると
よいでしょう。
参項────────────────────
[Delphi:47209] Re: デバッグの方法
[Delphi:62359] Re: Delphi 超初心者です
Delphi Acid Floor デバッグウィンドウ
http://www.wwlnk.com/boheme/delphi/vbtodel/vbfaq/vbd0060.htm
|