PICO-8スネークゲーム「ピコニョロ」で、アイテム表示の実装の途中、思うような結果にならず、デバッグをして解決しました。
デバッグ方法は、PICO-8をコンソール(Macだとターミナルアプリ)から立ち上げて、printf()関数を実行すると、PICO-8上ではなく、コンソール側に文字列を表示できます(ファイルに出力も出来る)。
それを使い、裏側でどんな状態になっているのかを知り、不具合の原因を突き止めます。
今回は、プログラムの流れがおかしくなっていることがわかっていた(実行すると処理が遅くなる)ので、「どの様に動いているのか?」を知る仕組みを作りました。
ちなみに、ずっと実行していると、
「printh: too much log data(10mb max)」とエラーが出ました(printhの出力ファイルのサイズは、10Mバイト)。
まず何を出力するのかというと、
- ループの処理の始まり
- ループの処理の終わり
- if文の結果の真偽
- チェックされる変数の内容
となります。
そして出力した結果の一部です。
このログを見て、
- ランダムとはいえ、ループ回数が異様に多い
- あるループが終わる毎にテーブルに加える要素数が増えている
ということがわかり、原因はループの入れ子にループがなっているが、add(テーブル, 要素)の命令の記述場所が、ループの内側に書いていたことがわかりました。
一日考えていたけれど解らず、次の日にデバッグログをファイルに出力して、バグの原因がわかりました。
いやぁ、嬉しかった。
これからも、この方法で解析&デバッグをしていきたいと思います。
コメント