我们在开发的过程中经常会用到一些统计工具来统计一些问题,如访问量,bug等,本文主要介绍我们发现有统计到bug的时候我们如何定位到我们的代码中;在平时的开发中我们可以通过调试台轻松的看到问题的所在,但是在友盟或者听云等统计平台上我们看到的仅仅是一些二进制数值,如何定位就成了我们解决bug的关键。
能过定位bug主要是通过dSYM文件(debugging SYMbols)又称为调试符号表,每一次打包之后都会生成这样的一个文件。在Windows->Organizer->archivers能购看到你的每一次的打包。
显示包内容,里面有三个文件夹分别是dSYMs,Products,SCMBlueprint三个文件夹,我们用到的是前两个文件夹,第一个文件夹就是刚刚提到的dSYM文件,其实它也是一个包文件,显示包内容你可以看到,你会发现它使用的是DWARF(Debugging With Attributed Record Formats)的格式,它是一种调试格式,有兴趣的同学可以查阅。
一.首先介绍一下友盟的统计crash定位方法:
我们在dSYMs文件夹中拿到.app.dSYM文件,在Products->Applicatons文件夹中拿到.app文件,这两个文件是一一对应的,把他们拿到一个文件夹中,命令行中cd到这个目录下,
输入指令: xcrun atos -arch arm64 -o xxxx.app/xxxx 0x10015e430
注:arm64 是你的CPU Type,在友盟中会显示
0x10015e430 是友盟中检测到的崩溃地址。
上述指令必须要求你的dSYM文件和app都存在,当你只有dSYM文件的时候可以用下面指令:
atos -o xxx.app.dSYM/Contents/Resources/DWARF/xxx 0x10015e430
或者
dwarfdump --arch=arm64 --lookup 0x100349b28 xxx.app.dSYM
有一个注意的点就是你在定位的时候一定要确认,友盟中dSYM UUID一定要和你找到的dSYM文件和app的UUID是一样的,这样才能正确的定位。
查看dSYM文件的UUID: dwarfdump --uuid xxxx.app.dSYM/Contents/Resources/DWARF/xxxx
查看app的UUID:dwarfdump --uuid xxxx.app/xxxx
二.公司在用友盟的时候,同时接入了听云,使用后我的感触是听云更方便些。我们可以清晰的看到崩溃前的几个步奏,点击了哪几个界面,更加方便的是我们要定位bug的时候也比较方便。我们只要找到对应版本的dSYM文件,显示包内容,按照路径:Contents->Resources->DWARF可以看到一个只有一个工程名字的文件,这就是编译的DWARF格式的文件,听云需要上传的是这个文件,上传之后,就能购清晰的看到,是哪个类的哪一行代码出现问题了,同时你也可以用脚本自动上传,有兴趣的同学可以研究一下。当然我们仍然可以按照上面的解析地址来确定crash的位置。