マネージコードで例外が発生する場合、例外の原因を理解するには例外のスタックトレースが役立ちます。ただし、一部の状況ではマネージスタックトレースが予期した通りに表示されない場合があります。スタックトレースはビルド設定によって異なります。
C++ Compiler Configuration プロパティを Debug に設定すると、IL2CPP は信頼性の高いマネージスタックトレースを報告し、各マネージメソッドをコールスタックに加えます。スタックトレースには、元の C# ソースコードの行番号は含まれません。
C++ Compiler Configuration プロパティを Release または Master に設定すると、IL2CPP によって、1 つまたは複数のマネージメソッドがないコールスタックが生成される場合があります。これは、C++ コンパイラーが欠落しているメソッドをインライン化するときに発生します。メソッドのインライン化は、通常、ランタイムのパフォーマンスを向上しますが、コールスタックを理解しにくくする場合があります。
IL2CPP は、常にコールスタック上に少なくとも 1 つのマネージメソッドを追加します。マネージ例外から作成されたスタックトレースの場合は、例外が発生したメソッドです。他のメソッドがインライン化されていない場合は、それらも追加されます。
マネージスタックトレースにファイルと行番号の情報を追加するには、Edit > Project Settings > Player > Other Settings に移動します。次に、Configuration の IL2CPP Stacktrace Information プロパティーを Method Name, File Name, and Line Number に設定します。
この設定は、IL2CPP にすべてのマネージスタックフレームをコールスタックに追加するよう指示します。マネージシンボルファイル (.pdb) が、そのコードが存在するマネージアセンブリ (.dll) で使用可能である限り、各スタックフレームには適切な C# 行番号も追加されます。
この機能を有効にすると、ビルド時間とビルドされたプログラムの最終的なサイズの両方がわずかに増加します。プレイヤーのビルドプロセスに、デバッグシンボルファイルを処理し、必要なシンボルの形式を含む新しいデータファイルを生成するステップが追加されます。Unity はこのデータファイルをビルドしたプレイヤーに同梱し、ランタイムにコールスタックの C# 行情報を判別するために使用します。
この機能を有効にすると、インライン化がある場合でも、Release または Master 設定のいずれかで正しいコールスタックを生成します。
Script Debugging を有効にするには、File > Build Profiles に移動し、Script Debugging チェックボックスを有効にします。スクリプトデバッグを有効にすると、IL2CPP はメソッド、ファイル、および行番号とともに正しいマネージスタックトレースを報告します。ただし、これを行うとプログラムサイズが大きくなり、パフォーマンスが低下します。
スタックトレースのみを改善したい場合は、スクリプトデバッグを有効にしないでください。代わりに、上記の手順で ソースコード行番号 を有効にします。