ドキュメント

Unity Engine

Unity Engine

Windows のデバッグ

Debug native C++ and managed C# game and Editor processes on Windows using Program Database symbols.
読み終わるまでの所要時間 10 分最終更新 1ヶ月前

Unity には、ゲームやエディター処理のフォレンジックやライブデバッグ作業のために、Windows でデバッグを実施するオプションがいくつかあります。Unity では、ネイティブ C++ と C# マネージの 2 種類のデバッグが可能です。
  • ネイティブデバッグは、関連するバイナリファイル (exe や dll など) のシンボルをプログラムデータベース (PDB) に格納します。
  • Windows では、標準 .NET が管理するシンボルが、PDB ファイルに拡張子 .pdb で保管されています。

シンボル

Unity のシンボルストアを使用して、Windows Debugger (WinDbg) または Visual Studio 2019 以降で Unity サーバー URL にアクセスし、シンボルの分解とダウンロードを自動で行うことができます。

Windows Debugger (WinDbg) の設定

WinDbg にシンボルストアを追加するには、
.sympath
コマンドを使用します。
.sympath+ SRV*c:\symbols-cache*http://symbolserver.unity3d.com/
上のパスで >
.sympath+
プラス (+) は既存のシンボルパスを保持し、シンボルストアを追加します。
SRV*c:\symbols-cache
SRV はフェッチ元のリモート サーバーを表します。
c:\symbols
は再度ダウンロードする前に最初に見るローカルパスで、ダウンロードしたシンボルをキャッシュします。
*http://symbolserver.unity3d.com/
フェッチ元のシンボルストアのパスです。

Visual Studio の設定

Visual Studio をデバッグのために設定するには、以下のステップに従います。
  1. Tools > Options を選択します
  2. Debugging セクションを展開し、Symbols を選択します
  3. キャッシュディレクトリを指定します (指定されていない場合)
  4. Unity のシンボルストアなど、シンボルファイル (.pdb) の場所を追加します。

ライブデバッグ

ライブデバッグは、すでに実行中のプロセス、または例外が検出されたプロセスにデバッガーを接続するシナリオです。デバッガーで問題を見つけるには、Visual Studio の設定のセクションで説明されているステップを使用して、ビルドにシンボルを追加する必要があります。また、ゲームの実行ファイルがゲームと同じ名前である場合、デバッガーは、名前が変更された実行ファイルにアクセスできない場合には特に、正しい
.pdb
ファイルの検出に問題が発生する可能性があります。

自動例外デバッグの設定

Windows では、アプリケーションクラッシュが自動的に Dr Watson/Error に送信され、Microsoft に報告されるように、Microsoft によってセットアップされています。ただし、Visual Studio または WinDbg がインストールされている場合は、代わりにクラッシュのデバッグを選択するオプションが、Microsoft から提供されます。
以下のレジストリの内容に従ってインストールします。
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] "Auto"="1"[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug] "Auto"="1"
エディターデバッグの追加コンテンツ:
Unity.exe -dbgbreak
自動クラッシュ処理が設定されている場合、上記は Unity を起動して、迅速にデバッガーを接続します。

クラッシュ後/フォレンジックデバッグ

Windows にはクラッシュダンプファイル (.dmp か .mdmp) を検証する機能があります。クラッシュダンプに応じて、スタック情報またはプロセス全体のメモリが表示されます。ダンプファイルの内容によってクラッシュの原因が判別されます。通常は、有効なスタックである限り、少なくとも調査対象となるスタックがあります。
ダンプファイルを検証するには、Visual Studio か WinDbg を通じてオプションを起動します。Visual Studio は使いやすいですが、WinDbg には追加機能があるため、より推奨されるデバッグツールです。

デバッグのヒントとコツ

Visual Studio を実行する場合は、デバッグをさらに簡単にする Unity の VS コード用 UnityMixedCallstack 拡張子を使用できます。

ネイティブの Managed 例外

NullReferenceException
は通常、以下のように表示されます。
1b45558c() > mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C

マネージスタックフレーム

マネージスタックフレームは通常、次のようになります。
1b45558c() > mono-2.0-bdwgc.dll!malloc(unsigned int size=12) Line 163 + 0x5f bytes C mono-2.0-bdwgc.dll!g_hash_table_insert_replace(_GHashTable * hash=0x065c3960, void * key=0x0018cba4, void * value=0x0018cb8c, int replace=457528232) Line 204 + 0x7 bytes C mono-2.0-bdwgc.dll!mono_jit_runtime_invoke(_MonoMethod * method=0x242bf8b0, void * obj=0x065c3960, void ** params=0x0018cba4, MonoObject * * exc=0x0018cb8c) Line 4889 + 0xc bytes C
情報がない行はマネージフレームです。Mono のマネージスタック情報は、
mono_pmip
というビルトイン関数を使用して取得できます。この関数は、スタックフレームのアドレスを受け入れ、情報と文字 * を返します。Visual Studio Immediate ウィンドウで
mono_pmip
を呼び出し、デバッグできます。
?(char*){,,mono-2.0-bdwgc.dll}mono_pmip((void*)0x1b45558c)
0x26a296c0 " Tiles:OnPostRender () + 0x1e4 (1B4553A8 1B4555DC) [065C6BD0 - Unity Child Domain]"`
注意これは、
mono-2.0-bdwgc.dll
シンボルが適切にロードされている場合にのみ機能します。

アプリケーションの強制による、ダンプファイルの作成

デバッガーが接続されているにもかかわらずアプリケーションがクラッシュしない場合や、デバッガーが使用できないリモートデバイス上でクラッシュする場合があります。このような場合は、以下のステップでダンプファイルから有用な情報を取得できます。
注意これらの手順は、Windows スタンドアロンとユニバーサル Windows プラットフォーム (UWP) 用 (デスクトップで実行している場合) です。
  1. Windows レジストリを開きます。
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
    に移動します。
  3. LocalDumps
    フォルダーがない場合は作成します。
  4. 次のキーを作成します。
    • “DumpFolder”=<FolderPath goes here> , e.g., C:\Temp
    • “DumpCount”=dword:00000010
    • “DumpType”=dword:00000002
  5. ユニバーサル Windows プラットフォーム (UWP) または Windows スタンドアロン実行ファイルからアプリケーションを起動します。
  6. クラッシュを再現します。ダンプファイルは前に指定したフォルダーに作成されます。ダンプファイルを、Visual Studio や WinDbg などの任意のデバッグツールで開きます。