Unity のコード書いたあとに、Visual Studio(コードエディター)を使って、コードのステップ実行やブレークポイントを設置して気になる箇所を確認するといった、典型的なデバッグ作業の(そもそもの)やり方に関するメモです。
環境構築
Visual Studio 2017 以前は、「Visual Studio Tools for Unity」を別途インストールする、設定をする必要があったりして、ややもすれば混乱しがちだったように思います。
現在の Visual Studio 2019 だと、Unity Hub のように Visual Studio Installer がインストール済の構成やバージョンを管理してくれるようになったので、設定の面での混乱が小さくなりました。おそらく、デフォルトで「Visual Studio Tools for Unity」がインストールされているかと思います。
Visual Studio Installer を開いて、Unity で使用している(する) Visual Studio の「インストールの詳細」に Unity によるゲーム開発、Visual Studio Tools for Unity が含まれているかどうかをチェックします。
とりあえず、これで Visual Studio 側の環境設定は完了です。Unity で使用するコードエディターを確認するときは、Unity > Preferences > External Tools
を開いて、External Script Editor
を設定・確認してみてください。
デバッグ(アタッチ)のやり方
テストとしてシンプルな方法:
- Unity Hub からデバッグをするプロジェクトを Unity で開く
- 問題のコードを選択して、Visual Studio を起動する
- Visual Studio のメニューから
デバッグ > Unity デバッガ―のアタッチ
を選択する - 起動しているプロジェクトを選択する
- Visual Studio でコードにブレークポイントを設置する
- Unity で「実行」ボタンを押下する
- ブレークポイントで停止するかどうかを確認する
こんな感じで、最初は正しくデバッグできるかどうかをチェックします。
デバッグの便利な設定・応用
Visual Studio のアタッチ設定を切り替えます。「Unity にアタッチして再生」にすると、Visual Studio 側から Unity の再生ボタンを押下して、プログラムのデバッグ開始(デバッグ再生)を指示することができるようになります。
Visual Studio に慣れてる人だと、F5
でデバッグを開始したくなるんで、もう必須だと思います。
Unity からも「Unity でコーディングするときに Visual Studio ツールを最適化するためのヒント」の記事で「“アタッチして再生”を使用してデバッグをスピードアップする」より、紹介されています。オススメ。
DebuggerDisplay 属性
デバッグ機能を使えるようになると「DebuggerDisplay 属性」を設定することで、よりデバッグがやりやすくなると思います。
通常だと、名前空間.クラス名 が表示されている部分を DebuggerDisplay のテキストに置き換えるデバッグ専用の機能です。
DebuggerDisplay の記述は、ちょっと癖があって string で扱う文字列補完をすべて扱うことができません。また、コンパイル時点までは、テキストとしてしか見ていないので、途中で変数名を変更してもエラーが表示されるわけでもありません。
なので、オススメなやりかたはこうなります:
[DebuggerDisplay("{DebuggerText}")] public class Sample { public int A { get; } = 1; public double B { get; } = 12.345; public string C { get; } = null; public string DebuggerText => $"A = {A}, B = {B:00.00}, C = {C ?? "null"}"; }
こんな感じで、デバッグのウォッチ情報から一覧が取得できます。これが強力になるシーンは、コレクション型のデータです。ウォッチの内容を潜っていかなくても、一覧として情報を確認することができるようになります。
デバッグとテスト
このデバッグのやり方はとても便利なんですが人力感が強く、テストとはまた別の強みがあります。なので、Unit テスト、コードメトリクス、バグを防ぐ・修正する手法は、色々なアプローチを修めておくとよいと思います。
参考
- 作者:Andreas Zeller
- 発売日: 2012/12/22
- メディア: 大型本
実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
- 作者:Norman Matloff,Peter Salzman
- 発売日: 2009/06/08
- メディア: 大型本