マネージコードで例外が発生する場合、例外のスタックトレースは例外の原因を理解するのに役立ちます。ただし、iOS では、ある状況ではマネージスタックトレースが想定通りに表示されない場合があります。いかにそれを説明します。スタックトレースはまた、 Xcode ビルド構成によっても異なります。
iOS でデバッグビルド構成を使用する場合、IL2CPP は信頼できるマネージスタックトレースを報告し、各マネージメソッドをコールスタックに包含する必要があります。 スタックトレースには、元の C# ソースコードの行番号は含まれません。
リリースビルド構成を使用する場合、IL2CPP がマネージメソッドが欠けているコールスタックを生成することがあります。これは、C ++ コンパイラーが欠落しているメソッドをインライン展開しているためです。メソッドのインライン展開は、通常、ランタイムのパフォーマンスには優れていますが、コールスタックを理解しにくくする場合があります。IL2CPP は、常にコールスタック上に少なくとも 1 つのマネージメソッドを提供します。これが、例外が発生するメソッドです。 他のメソッドがインライン化されていない場合は、それらも含まれます。
例外をローカルで再現できる場合は、Xcode を使用してどのメソッドがインラインにされているかを判断します。リリース構成を使用して Xcode でアプリケーションを実行し、例外ブレークポイントを設定します。Xcode のネイティブコールスタックビューは、どのメソッドが実際に存在し、どのメソッドがインライン化されているかを示す必要があります。
IL2CPP コールスタックには、デバッグ構成、または、リリース構成のソースコード行番号の情報が含まれていません。