ここはどこ?
突然ですがここはどこでしょう?ラジオ体操発祥の地ということなので、携帯で撮ってみました。
FDKジェダイの武器~リロードマクロ~
さて本題に移って… 今回は、FDKプログラムのデバッグを効率的に実施する方法について考察してみる。
(FDKとはFrameMake Developer’s KitのことでAdobe FrameMaker をカスタマイズするプラグインを作成する際に使用されている)
VisualStudioのデバッガは?
やはり、最も簡単に詳細なデバッグが行えるのはVisualStudioのデバッガである。
デバッグ用のコードを全く書かなくても、実行時の変数の値、関数の戻り値等を知ることができるのは、大きな利点といえるだろう。
しかし、VisualStudioのデバッガにもFDKプログラム開発特有の欠点がある。
それは、FrameMakerがページ数の多い文書を作成するために使用されることと関係がある。
つまり、大容量の文書を扱うために、大抵、FDKプログラムは実行開始から終了までに長い時間がかかるのである。
それを、VisualStudioのデバッガを使用してStep By Stepでデバッグを行っていくと、いつまでたっても問題の部分にたどり着かないのである。
確かに、ある程度問題の箇所が絞り込まれていれば、その直前にブレークポイントを配置してデバッグ実行すれば良い。
しかし、問題箇所が絞り込まれていない段階では、それも難しい。
とりわけ、このような画面が出てFrameMakerが落ちてしまう場合は、問題がどこにあるか見当が付かない場合が多いのである。
この問題は、FDKプログラムに限ったことだけではなく、実行開始から終了まで時間のかかるプログラム、また終了することがないサービスのようなプログラムでも同じことがいえるだろう。
ログ出力
ではどうすれば問題の箇所に見当をつけることができるだろうか。
プログラム内のポイントとなる箇所でログ出力するようにプログラムを作成しておくと、どこで問題が発生しているか特定する助けとなる。
例えば、全ての関数の先頭で「function~~:開始」、末尾で「function~~:終了」などとログファイルに記録するようにプログラムを作成すると、どの関数で問題が発生しているのかが見えるようになる。
つまり、開始したのに終了していない関数に問題があることが分かる。
このように
- ログ出力して問題の箇所をだいたい把握する。
- VisualStudioのデバッガで問題の箇所にブレークポイントを配置してデバッグ実行する。
という方法が、FDKプログラムの効率的なデバッグ方法と思われる。
秀丸エディタ+リロードマクロ
さて、プログラムの実行中に出力されるログをどのようにしたら効率的に見ることができるだろう。
メモ帳でログファイルを見るのはどうだろうか。
プログラムが完全に終了してから出力されたログファイルを見る場合は、メモ帳で問題ないだろう。
では、プログラムの実行途中でログファイルを見たい場合はどうだろうか。
もちろんメモ帳でも見ることはできる。
しかし、プログラムの実行中はログファイルの内容は時間とともに追記されていくので、最新のログファイルの内容を見たい場合は、
- メモ帳をいったん閉じ
- 再度ログファイルをメモ帳で開き
- メモ帳をスクロールして追記されたログを確認する
ことになる。ちょっと面倒くさい…
[F5]キーを押すだけで最新のログが確認できたら理想ではないだろうか。
この理想を実現する方法の一つが、秀丸エディタのマクロである。
秀丸エディタで、[F5]キーを押してファイルをリロードする方法を以下に示す。
-
- 秀丸エディタで新規文書を作成し、以下の内容を書き込む。
if ( updated == 1 ) {
message "ファイルが更新されています" ;
endmacro ;
}
#curlineno = lineno ;
loadfile filename ;
movetolineno 0 , #curlineno
- ファイル名を「reload.mac」として保存する。
- 秀丸エディタの[マクロ-マクロ登録…]メニューで、タイトル「リロード」として「reload.mac」を登録する。
- 秀丸エディタの[その他-キー割り当て…]メニューで、[F5]キーに「リロード」マクロを割り当てる。
- 秀丸エディタの[その他-動作環境…]メニューで表示される[動作環境ウィンドウ]で[上級者向け設定]を有効にし、設定項目[ファイル-排他制御-秀丸エディタで同じファイルを開く場合]を「同じファイルを2つ開くことを禁止する」に設定する。
これで[F5]キーを押すだけで現在開いているファイルをリロードし、最新の内容を表示することができるようになる。
この、「秀丸エディタ+リロードマクロ」はFDK開発者のデバッグ作業において、効率を一段と向上する強力な武器となるだろう。
それでは、May the Force be with You.
Luke SkywalkerことN.T