デバッグについて考える

ゲームを作るための重要な支援機能として、MMF2には標準のデバッガがあります。これ以外にも方法は色々あるのですが、自作のゲームあるいはプログラムからバグを無くし、しかも効率良く速くデバッグするための方法とかを考えてみます。

楽しくゲームをプレイしていたら不条理なバグに遭遇して理不尽な思いをしたことは誰でもあるかと思われます。開発者もバグを付けたくてつけてるわけじゃないけど、うっかりミスでバグを付与してしまうことが多々有ります。これを「エンバグ( enbug )」と言います。


これに対してプログラムからバグを取ることを「デバッグ」と呼び、デバッグするための支援機能を「デバッガ」、あるいはデバッグ担当の人を「デバッガ」と呼ぶこともあります。ゲーム作成ツールである MMF2 にも標準でデバッガが付いています。またこの使い方などを理解するとゲームの開発が格段に速くなります。

MMF2が提供するデバッガの機能について

まず新規に作成した mfa ファイルから始めてみましょう。CTRL + N で新規にアプリを作るところからです。設定とかなにも弄らなくて良いので新規に作ったらそれを早速プレビュー実行してみましょう。
debug00a

実行すると真っ白なウィンドウが表示されましたね。そこでウィンドウじゃなくてモニタ画面の左上に注目。

debug01

これが MMF2 のデバッガです。画像の赤い●部分をクリックしてデバッガを開いてください。開いたものが以下の画像になります。

debug00s

標準のデバッガ機能で表示されるのは変数ならグローバル変数(数字・文字)、そしてオブジェクト数やメモリの使用量などです。変数の中身を表示したい場合は、実際に変数を使わなければ表示されません。

グローバル変数以外にも MMF2 にはアクティブオブジェクトや各オブジェクトが持つ数値型変数、文字列型など各変数を表示したい場合などもあるかと思われます。こういう時はオブジェクトをデバッガに追加することで追加したオブジェクトの変数内容を表示できるようになります。

よし、それでは実際にグローバル変数に少し値を入れて、ひとつアクティブオブジェクトをフレームに追加して、そのオブジェクトをデバッガにも追加してみましょう。デバッガへの追加の仕方は以下の画像…画像は英語版ですが日本語版も同じ位置に「デバッガへ追加」という項目があったはずです。

このようにフレームが開始時にデバッガへオブジェクトを追加する処理を行う必要があるという点だけ覚えておいてください。

debug02

これでデバッガに追加はできました。実際にアプリをプレビュー実行してデバッガを開いてみてください。先ほどと段違いの情報量になったのが確認できるかと思われます。画像で赤い矢印の部分を注目して見て行ってください。

debug03

さらに進んだデバッグとか

ここからはいきなり脱初心者向けの内容になります。MMF2 のデバッガ機能は様々な値を表示するのが主です。もっとプログラマ的にはブレークポイントとかステップ実行とか無いんかYO!って不満があるかもしれませんが、その辺は標準で提供されているデバッガにはありません。

そういった機能については無ければ自分で作ることはできます。

例えばデータの詳細なログを取ってファイル出力したい場合などはインハウスツールとして自分でデバッグ専用のアプリを作るとかは自分もやりました。開発するアプリの規模に応じて先にデバッガの設計を行ったほうがスムーズに開発が進むプロジェクトなどもあると思われ、早い話 MMF2 の標準デバッガはすごく貧弱な最低限の機能しか持ってないです。

エクステンションを利用した場合色々デバッグ機能を拡張することができます。

本来はデバッグ用途のエクステンションじゃないはずなんですが、例えばカウンターとか文字列オブジェクトを使って変数の内容を確認するとかは MMF2 を使った開発のデバッグとしては基本です。それ以外にも特定のタイミングでアプリケーションを一時停止させたい場合とか、あるいはアプリケーション動作をスローモーションみたいにしたいとか、そういった場合はエクステンションもすこし特殊なものを探して選んで使ったりします。

ログをファイル保存したい場合は自分の場合 XLua か SQLite3。外部ファイルにログを出力してそのログをリアルタイムで表示するためのデバッグ用アプリを自作した場合もあります。Sleep オブジェクトなどもデバッグ中は活躍するかもしれません。