版本:Unity 6 (6000.0)
语言:英语
Windows 运行时支持
脚本限制

使用 IL2CPP 的托管堆栈跟踪

当托管代码中发生异常时,异常的堆栈跟踪可以帮助您了解异常的原因。但是,在某些情况下,托管堆栈跟踪可能不会按预期显示。堆栈跟踪会因构建配置而异。​

C++ 编译器配置选项

调试

当您将 C++ 编译器配置 属性设置为 调试 时,IL2CPPUnity 开发的脚本后端,您可以将其用作在构建某些平台的项目时使用 Mono 的替代方案。 更多信息
请参阅 术语表
会报告可靠的托管堆栈跟踪,并包含调用堆栈中的每个托管方法。堆栈跟踪不包含原始 C# 源代码中的行号。​

发布和主版本

当您将 C++ 编译器配置 属性设置为 发布主版本 设置时,IL2CPP 可能会生成缺少一个或多个托管方法的调用堆栈。当 C++ 编译器内联缺少的方法时,就会发生这种情况。方法内联通常会提高运行时性能,但会使调用堆栈更难理解。

IL2CPP 始终在调用堆栈上至少提供一个托管方法。对于从托管异常创建的堆栈跟踪,这是发生异常的方法。如果它们未被内联,它还将包含其他方法。​

源代码行号

要在托管堆栈跟踪中包含文件和行号信息,请转到 编辑 > 项目设置 > 播放器 > 其他设置。然后,在 配置 标题下,将 IL2CPP 堆栈跟踪信息 属性设置为 方法名称、文件名和行号 设置。

The IL2CPP Stacktrace Information property, set to Method Name, File Name, and Line Number
IL2CPP 堆栈跟踪信息属性,设置为方法名称、文件名和行号

此设置指示 IL2CPP 在调用堆栈中包含所有托管堆栈帧。每个堆栈帧还包含正确的 C# 行号,只要托管程序集 (.dll) 中存在该代码的托管符号文件 (.pdb)。

启用此功能后,会稍微增加构建时间和已构建程序的最终大小。播放器构建过程包括一个额外的步骤,该步骤处理调试符号文件并生成包含必要符号格式的新数据文件。Unity 将此数据文件与已构建的播放器一起提供,并在运行时使用它来确定调用堆栈中的 C# 行信息。

启用此功能后,Unity 会在 发布主版本 配置中生成正确的调用堆栈,即使存在内联也是如此。

启用脚本调试

要启用 脚本调试,请转到 文件 > 构建配置文件,然后启用 脚本调试 复选框。启用脚本调试后,IL2CPP 会报告包含方法、文件和行号的正确托管堆栈跟踪。但会以程序大小增加和性能降低为代价。

如果您只想改进堆栈跟踪,则不应启用脚本调试。而是按照上述说明启用 源代码行号

其他资源

Windows 运行时支持
脚本限制