プログラムを記述して、コンパイルエラーがなければ実行する。しかし思ったような結果にならないことはよくある。そんなときに有効なデバッグテクニックを紹介する。
ログファイルを使う方法
実行中のコードにログファイルに文字列を出力するコマンドを挿入しておいて、実行時に注目している変数がどのような値になっているかを調べる。アラートダイアログの方法と違ってプログラムが止まらないという長所がある。
次のコードをスクリプトパレットに登録し、図形を選択してから実行する。
procedure debug_test;
var
h: handle;
myType: integer;
gAryLog: DYNARRAY [] OF STRING; { Jiro_LogAdd }
gCntOfAryLog: LONGINT; { Jiro_LogAdd }
(* -------------------------------
関数:Jiro_LogAdd
機能:ログ出力バッファに1行メッセージを追加する
------------------------------ *)
PROCEDURE Jiro_LogAdd( msg: STRING );
BEGIN
gCntOfAryLog:= gCntOfAryLog +1;
ALLOCATE gAryLog[ 1.. gCntOfAryLog];
gAryLog[gCntOfAryLog]:=msg;
END;
(* -------------------------------
関数: Jiro_Logout
機能: ログ出力: メッセージをテキストファイルに書き出す
------------------------------ *)
procedure Jiro_Logout;
CONST
kFileName='/Users/wat/Desktop/my_log.txt'; { デスクトップのファイル名 }
var
i: LONGINT;
begin
ReWrite( kFileName ); {保存ダイアログなし}
FOR i:=1 TO gCntOfAryLog DO BEGIN
WriteLn( gAryLog[i] );
END;
Close(kFileName);
end;
begin
h:=FSActLayer;
while h<>NIL do begin
myType:=GetTypeN( h );
Jiro_LogAdd( concat( 'debug_test: type=', Num2StrF(myType)));
h:=NextSObj(h);
end; {while}
{ ログ出力 }
Jiro_LogAdd( concat( Date(2,1), 'END of PGM' ) );
Jiro_Logout;
end;
RUN ( debug_test );
グローバルな配列変数gAryLogに出力するログをためていって、プログラムの最後でファイルに出力する、というコードだ。
2つの図形を選択して実行する。

実行すると、デスクトップに「my_log.txt」というテキストファイルが作成される。ファイルの中身は次のとおり。

コーディングは少し面倒ではあるが、うまく使えばプログラムの動きがよくわかる。