当托管代码中发生异常时,该异常的堆栈跟踪可以帮助您了解发生异常的原因。然而,在 iOS 上,托管堆栈跟踪在某些情况下可能无法按预期显示。堆栈跟踪也会根据 Xcode 构建配置而有所不同。
在 iOS 上使用调试构建配置时,IL2CPP 会提供可靠的托管堆栈跟踪,并在调用堆栈中包含每个托管方法。但该堆栈跟踪不会包含原始 C# 源代码中的行号。
使用发布版本配置时,IL2CPP 可能会生成缺少一个或多个托管方法的调用堆栈。这是因为 C++ 编译器已经内联了缺少的方法。虽然方法内联可以提升运行时性能,但会使调用堆栈更难以理解。IL2CPP 始终在调用堆栈上提供至少一个托管方法。此方法便是发生异常的方法。调用堆栈上还包括其他未内联的方法。
如果能够在本地复现异常,可以使用 Xcode 查看内联方法。在 Xcode 中使用发布配置运行应用程序,并设置异常断点。Xcode 的原生调用堆栈视图将显示实际存在和已被内联的方法。
默认情况下,IL2CPP 调用堆栈在调试和发布配置中均不包含源代码行号信息。如果需要启用源代码行号,可以按照以下步骤操作:
注意:启用此选项可能会增加构建时间和最终程序的体积。