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

崩溃

崩溃检查清单

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

Editor 上的 Editor.log

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

如果想了解目前发生的情况,请查看 editor.log。您将在该日志中看到所有内容,而非只有控制台部分。可尝试了解目前发生的情况,并查看编码会话的完整日志。这将有助于找出导致 Unity 崩溃的原因或弄清楚资源的问题。

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

Android 上的调试

  1. 使用 DDMSADB 工具
  2. 查看堆栈跟踪(Android 3 或更高版本)。使用 c++filt_(_ndk 的一部分)或其他方法(如:http://slush.warosu.org/c++filtjs)对损坏的函数调用进行解码
  3. 查看出现崩溃的 .so 文件:
    1. libunity.so - 崩溃出现在 Unity 代码或用户代码中
    2. libdvm.so - 崩溃发生在 Java 世界的 Dalvik 某个位置。因此,请找到 Dalvik 的堆栈跟踪,查看 JNI 代码或任何与 Java 相关的内容(包括可能对 AndroidManifest.xml 进行的更改)。
    3. libmono.so - Mono 错误或执行的操作不符合 Mono 的规则
  4. 如果崩溃日志没有帮助作用,可将日志进行分解以粗略了解发生的情况。
    1. 使用 Android NDK 中的 ARM EABI 工具,如下所示:_objdump.exe -S libmono.so >> out.txt_
    2. 从堆栈跟踪中查看 PC 相关代码。
    3. 尝试在全新的 out.txt 文件中匹配该代码。
    4. 向上滚动以了解出现崩溃的函数中发生的情况。

iOS 上的调试

  1. Xcode 具有内置的工具。Xcode 4 有一个非常友好的 GUI 可用于调试崩溃,Xcode 3 则稍逊一筹。

  2. 完整 gdb 堆栈 - thread backtrace all

  3. 启用 soft-null-check: 启用开发版本和脚本调试。现在,未捕获的 null 引用异常将通过适当的托管调用堆栈输出到 Xcode 控制台。

  4. 尝试关闭“快速脚本调用”和代码剥离。这样做可能会阻止一些随机崩溃,例如因使用一些罕见的 .Net 函数或反射引起的崩溃。

策略

  1. 尝试找出发生崩溃的脚本,并在设备上使用 MonoDevelop 对其进行调试。
  2. 如果崩溃看起来不在您的代码中,请仔细查看堆栈跟踪,应该能找到一些问题的线索。请复制一份并提交,让我们帮您诊断。
移动平台开发者检查清单
性能分析