2009年06月22日

Script-Fu スクリプトのデバッグ方法

まとまった時間ができたので、Gimp wikiのほうの”Script-Fu 青空教室”を更新しました。
画像もだいたいGimp-2.6のものに差し替えることができました。他、関数や構文も2.6のものに新しく置き換えることができていると思います。
もしまだ間違っているところがありましたら教えてください。

もうちょっと見直してから、”Script-Fu 青空教室”の更新は終わります。

青空教室を新しく書き換える過程で、エラー対策のところを独立した別ページにしました。
そのときに色々調べていて、今のGimpには新しいデバッグ方法があることを知りました。これについて触れているサイトも少なくて、せっかくなのでそれを紹介します。

やり方は簡単で、スクリプト本文中に

トレースを開始する場合:
(tracing TRUE)

トレースを終了する場合:
(tracing FALSE)


の二文を、トレースしたい区間の前後に追加するだけです。簡単ですね。
Script-Fuコンソールでもtracingを使用できます。

このようにすると、トレースが有効になっている区間で何かエラーが起きた場合に、そのトレース結果が表示されます。
トレース結果を読み解くことは難解かもしれませんが、トレース結果を読むことで問題解決の手がかりになると思います。

Eval: では評価している様子が分かります。
Apply to: では引数に対してコードを適用しているところです。
Gives: では、評価した結果が表示されます。

しかし問題のあるスクリプトを実行してトレース結果を表示させた場合、トレース結果が膨大な量になってダイアログに表示しきれないと思います。
この場合、エラーコンソールを開いておくとトレース結果がダイアログに表示されるのではなくて、エラーコンソール内に表示してくれるので便利です。エラーコンソールは、「ウィンドウ→ドッキング可能なダイアログ→エラーコンソール」にあります。

エラーコンソール

ちょっと変わった方法としては、gimp-message-set-handler関数を使う方法です。プロシージャブラウザからこの関数の説明を読むと分かると思いますが、通常の場合、エラーメッセージはMESSAGE-BOXになっているのでエラーダイアログがポップアップされて、そこに表示されます。これをCONSOLEに変えるとstdoutに出力されます。ERROR-CONSOLEはエラーコンソールです。
gimp-message-set-handlerを使う場面としては、バッチモードでスクリプトを使うときでしょうか。

このトレースがいつから使えるようになったのかといえば、GimpのインタプリタがSIODからTinySchemeに変わったときです。tracingのオンオフによる出力機能は plug-ins/script-fu/tinyscheme/scheme.c において実装されています。
そういえばTinySchemeの利点としてスクリプトのデバッグがこれまでよりもやりやすくなった、という記述がありましたね。おそらくこのトレース機能のことを指しているのだと思われます。

それはともかくとして、これまでの古典的な (gimp-message message) と比べるとスクリプトのデバッグが明らかに行いやすくなりましたね。
最近のGimpではスクリプトの実行の際のエラーのメッセージも親切に表示されるようになっているので、昔と比べると随分と分かりやすくなっていると思います。いい時代になっていますね。
posted by いっちー at 23:52| Comment(0) | memo | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。