程序看过来:Unity3D手游奔溃怎么破
Unity3D 异常日志处理基础
Unity3D 基于 Mono 框架进行开发,在这种开发环境下,C# 脚本的异常通常不会直接导致程序崩溃。然而,对于开发者而言,能够快速获取这些异常日志对 App 的稳定性至关重要。
Unity3D(简称 U3D)提供了日志回调函数 Application.RegisterLogCallback 来处理相关异常日志。这个日志会记录脚本异常的堆栈信息。通过 RQD 提供的接口,可以很方便地将这些日志上传。
iOS 版本的 dSYM 文件处理
dSYM 文件概述
对于 iOS 版本,在构建时需要保存 ipa 对应的 dSYM 符号文件,这主要用于日后 iOS 崩溃的定位。当 Xcode 编译项目后,会生成一个与项目同名的 dSYM 文件,且该文件会与 ipa 文件一同出现。dSYM 是保存 16 进制函数地址映射信息的中转文件,调试所需的所有符号(symbols)都包含在这个文件中。并且,每次编译项目时都会生成一个新的 dSYM 文件。
dSYM 文件的作用
当软件以 release 模式打包或上线后,无法像在 Xcode 中调试那样直观地看到崩溃错误。此时,就需要分析 crash report 文件。iOS 设备会保存每个应用出错的函数内存地址,借助 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件。通过出错的函数地址,结合软件版本对应的 dSYM 文件,就能查询到程序对应的函数名和文件名。这也解释了为什么有必要保存每个发布版本的 Archives 文件。
解析 iOS 上报堆栈
目前 RDM 网站上 iOS 上报的堆栈信息往往难以直接确定具体崩溃位置,需要采用以下手段进行解析:
- 找到匹配的 dSYM 文件:找到与上报 crash 的 UUID 一致的 dSYM 文件。
- 确定崩溃函数:利用
xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x4000 -arch armv7命令确定具体的崩溃函数。
真机运行 U3D 断点调试方法(iPhone)
若要在真机(iPhone)上进行 U3D 断点调试,可按以下步骤操作:
- 网络设置:在 Mac 机上建立一个网络(也可以尝试让 Mac 和 iPhone 连接到同一个 Wi-Fi 热点)。
- 设备连接:让 iPhone 连接到 Mac 建立的网络。
- U3D 配置:在 U3D 中勾选
Develop Build、Script Debug和Build And Run选项。 - Xcode 部署:使用 Xcode 将应用运行到 iPhone 上。
- 暂停运行:当 iPhone 上的应用运行起来后,立即在 Xcode 中点击停止。
- 连接调试:开启 MonoDevelop,选择
Attach Process,此时应该可以看到你的 iPhone。 - 断点调试:进行 C# 断点调试。