Version: 2020.1
移动平台开发者检查清单
性能分析

崩溃

崩溃检查清单

  • 禁用代码剥离(并为 iOS 设置“slow with exceptions”)
  • 按照优化构建的 iOS 播放器的大小的说明操作,确保游戏不会在 iOS 上因代码剥离而崩溃。
  • 确认崩溃不是因为内存不足(重新启动设备,将设备的最大 RAM 用于该平台,务必查看日志)。

Editor.log - 在编辑器上

调试消息、警告和错误都将输出到控制台。Unity 还会将状态报告输出到控制台:加载资源、初始化 Mono、图形驱动程序信息。

如果要了解发生了什么,请查看 editor.log 文件,该文件提供比控制台更详细的信息。可尝试了解目前发生的情况,并查看编码会话的完整日志。这将有助于找出导致 Unity 崩溃的原因或弄清楚资源的问题。

Unity 还会在设备(Android 的 Logcat 控制台和 iOS 设备上的 Xcode gdb 控制台)上输出一些信息

Android 上的调试

  1. 使用 DDMSADB 工具
  2. 观看堆栈跟踪。使用 c++filtndk 的一部分)或其他方法对损坏的函数调用进行解码
  3. 查看出现崩溃的 .so 文件:
    1. libunity.so - 崩溃出现在 Unity 代码或用户代码中
    2. libdvm.so - 崩溃发生在 Java 世界的 Dalvik 某个位置。因此,请找到 Dalvik 的堆栈跟踪,查看 JNI 代码或任何与 Java 相关的内容(包括可能对 AndroidManifest.xml 进行的更改)。
    3. libmono.so - Mono 错误或执行的操作不符合 Mono 的规则

如果崩溃日志没有帮助,可将日志进行分解以粗略了解发生的情况: 1. 像这样使用来自 Android NDK 的 ARM EABI 工具:objdump.exe -S libmono.so>>out.txt。 1. 从堆栈跟踪查看 PC 相关代码 1. 尝试在新的 out.txt 文件中匹配这些代码。 1. 向上滚动以了解它发生的方法中发生了什么。

iOS 上的调试

  1. Xcode 具有内置工具,可调试应用程序。
  2. 完整 gdb 堆栈 - thread backtrace all
  3. 启用 soft-null-check:启用开发版本和脚本调试。现在,未捕获的 null 引用异常将通过适当的托管调用堆栈输出到 Xcode 控制台
  4. 尝试关闭 “fast script call” 和代码剥离。这样做可能会阻止一些随机崩溃,例如因使用一些罕见的 .NET 方法或反射引起的崩溃。

策略

  1. 尝试找出发生崩溃的脚本,并在设备上使用 MonoDevelop 对其进行调试。
  2. 如果崩溃看起来不在您的代码中,请仔细查看堆栈跟踪,应该能找到一些问题的线索。如果您认为崩溃是由于 Unity 的问题而发生的,请参阅已知问题跟踪器或提交错误。
移动平台开发者检查清单
性能分析