Version: 6000.3
语言: 中文
Linux IL2CPP 交叉编译器
脚本限制

使用 IL2CPP 的托管堆栈跟踪

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

C++编译器配置选项

调试

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

发布和掌握

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

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

源代码行号

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

IL2CPP 堆栈跟踪信息属性,设置为“方法名”、“文件名”和“行号”
IL2CPP 堆栈跟踪信息属性,设置为“方法名”、“文件名”和“行号”

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

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

启用此功能后,Unity 会在 ReleaseMaster 配置中生成正确的调用堆栈,即使在存在内联的情况下也是如此。

启用脚本调试

要启用脚本调试,请转到 文件>构建配置文件(File Build Profiles),然后启用 脚本调试(Script Debugging) 复选框。启用脚本调试后,IL2CPP 会报告正确的托管堆栈跟踪,其中包含方法、文件和行号。这是以更大的程序大小和性能下降为代价的。

如果只想改进堆栈跟踪,则不应启用脚本调试。相反,请启用如上所述的源代码行号

其他资源

Linux IL2CPP 交叉编译器
脚本限制