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

崩溃

崩溃检查清单

  • 禁用代码剥离(并为 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 的问题而发生的,请参阅已知问题跟踪器或提交错误。

Did you find this page useful? Please give it a rating:

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