系统崩溃        

系统崩溃检查表

  • 禁用代码剥离(并在 iOS 设备上设置“因异常而减慢 (slow with exceptions)”)

  • 按照优化所创建的 iOS 播放器大小说明 (iphone-playerSizeOptimization.html),确保游戏不会在 iOS 上因代码剥离而崩溃。

  • 验证崩溃不是由内存不足所引起(重新启动设备,将设备的最大 RAM 用于该平台,务必观察日志信息)

编辑器上的 Editor.log

调试消息、警告和错误都出现在控制台上。同时 Unity 会将状态报告输出到控制台,包括加载资源、初始化 mono、图形驱动器信息。

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

Unity 也在设备上输出一些事项;安卓 (Android) 系统的 Logcat 控制台和 iOS 系统的 Xcode gdb 控制台

Android

在安卓 (Android) 上调试
  1. 使用 DDMSADB 工具

  2. 观察堆栈轨迹(安卓 (Android) 3 或更新版本)。使用 c++filtndk 的一部分)或其他方法,如: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. 如果 crashlog 没有帮助,可以反汇编,大致了解已发生的事件。

    1. 使用 Android NDK 中的 ARM EABI 工具,如:objdump.exe -S libmono.so >> out.txt

    2. 在电脑堆栈轨迹中查看代码。

    3. 尝试在最新的 out.txt 文件中匹配代码。

    4. 向上滚动,了解出现崩溃的函数发生了什么。

iOS

在 iOS 上调试
  1. Xcode 带内置工具。Xcode 4 带非常不错的 GUI 来调试系统崩溃情况,Xcode 3 版本的稍差些。

  2. 完整的 gdb 栈 - 线程应用所有的 bt

  3. 启用空值软检查 (soft-null-check):

启用开发构建和脚本调试。这时未捕获到的空引用异常将通过适当的托管调用栈输出到 Xcode 控制台。

  1. 尝试关闭“快速脚本调用 (fast script call)” 和代码剥离。这样能阻止一些随机崩溃,如一些由于使用罕用的 .Net 函数或映像所导致的崩溃。

策略

  1. 尝试找出出现崩溃的脚本,并在设备上使用 Mono Develop 进行调试。

  2. 如果崩溃似乎不是在脚本中,请仔细查看堆栈轨迹,其中应该会有一些发生情况的提示。复制并提交,我们会仔细查看。

,