Version: Unity 6.0 (6000.0)
言語 : 日本語
Windows 用の Visual Studio プロジェクトの作成
Introduction to debugging Unity in Windows

Windows のデバッグ

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 などの任意のデバッグツールで開きます。
Windows 用の Visual Studio プロジェクトの作成
Introduction to debugging Unity in Windows