今回はUnityのデバッガについてです。
この記事は以下の記事の続き的な物です
[Unity3D]Unityでデバッグする
[Unity]iOSの実機でスクリプトでバッグする方法
[Unity]Android実機でスクリプトデバッグする方法
Unityの…というかMonodevelopのデバッガは常識の範囲内で強力です。
これを上手く使用することで、ソースコードにDebug.Logを大量に仕込むような事をせず、若干簡単にソースコードの実行状況や実行順番等を確認することが出来ます。ステップ(行)の動かし方は、こちらの下の方の記事をどうぞ。
UnityのプロセスにMonodevelopのデバッガをアタッチすると、上のような画面が出てきます。これは、Unityプロセスを確認するために便利な機能一覧です。
各タブは以下のような機能を持っています。
BreakPoints:設定したブレークポイント一覧
Locals:停止した位置から見たローカル変数
Watch:Localへのショートカット
Call Stack:停止時のコールスタック
Immediateコマンドを実行する
Threads:現在のスレッド及びスレッド一覧
Localsは単純に変数の値を確認する機能です。例えば停止した際の変数はどのような値か、nullは入っていないか等を確認することが出来ます。ただしソースコードの規模によってはこの項目は膨大になってしまうので、Watchを使用し事前に見る変数を決めておくことで、素早く確認することが出来ます。
また、この項目で確認出来る値はデバッガから上書きする事が出来ます。例えば上の図ではcallCountの値が5となっていますが、この値を10に変更してcontinueでプログラムを再開した場合、callCountは10になっているハズです。
なお、UnityのMonoBehaviourを継承したクラスの場合、別スレッドにBraekPointを設定している場合は確認することが出来ません。その場合は、Threadsにて現在のスレッドをメインスレッドにすることで確認出来るようになります。高度なゲームを開発しようとする場合スレッドはどうしても出てくるので、この方法で確認出来るようにしておくと何かとお得です。
が付いているスレッドが現在選択中のスレッドです。
また、ブレークポイントで停止した処理がどのメソッドから呼ばれているか等は、Call Stackから確認することが出来ます。コールスタックには「呼び出したメソッド名」と「呼び出す際に指定した引数」を確認できるので、これでどのメソッドがどういった順番で呼び出したかを確認することが出来ます。
最後に、Immediateタブからメソッドを直接呼び出す事が出来ます。例えば下の図のように、CallDebug()メソッドを呼び出したり、countに320を代入したりといった形です。
このタイミングで処理を実行したい・何か挙動が違うので全データのログをファイルに出力したい…といった場合に、このような形で実行できると何かと便利かもしれません。テストコード仕込まなくて済みますし。
なお、これらの機能はiOS/Androidでも使えたと思います。使えない場合は一旦接続を切ってから再接続して下さい(自分の環境では大体これで治ります)