Unity3D手游崩溃定位研究

发表于2015-11-17
评论0 4.5k浏览

       Unity3D基于mono框架上进行开发的,C#脚本的异常通常不会导致程序的崩溃,但是对于开发者来说能够快速的获取这些异常日志,对于app的稳定性来说非常重要。

 

U3D提供了日志回调函数Application.RegisterLogCallback来处理相关异常的log,这个log里面记录脚本异常的堆栈,通过rqd提供的接口能够非常方便的把这些日志上传上来。

 

对于ios版本,需要在构建的时候把ipa对应的dSYM 符号文件保存下来,用于日后ios崩溃的定位。

 

什么是dSYM 

Xcode编译项目后,我们会看到一个同名的 dSYM 文件和ipa在一起,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件。

 

dSYM 文件有什么作用?

当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode  Organizer 可以将 iOS 设备中的 DeviceLog 导出成crash 文件,这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。

 

目前rdm网站上ios上报的堆栈大致如下:

我们并不能知道具体崩溃在什么地方,需要采用如下手段进行解析

  1.        找到和上报crash uuid一致的dsym
  2.       利用xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x4000 -arch armv7 命令确定具体的崩溃函数

 

真机运行U3D断点方法(iPhone方法):
1、mac机建立一个网络 (也可以尝试选择同一个wifi热点)

2、iphone连接mac的网络

3、U3D 勾选develop build,script debug,buildrun

4、xcode run app到iphone

5、iphone上面运行起来后,马上点xcode stop

6、开启monodevlop,attachprocess 可以看到你的iphone

7、c#断点调试

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引