美文网首页Tools编程技术类iOS开发
iOS crash日志堆栈地址符号化

iOS crash日志堆栈地址符号化

作者: 嘿_小子 | 来源:发表于2017-02-09 11:19 被阅读833次

    .dsym(符号表文件)

    .crash(崩溃日志)

    .app (Optional)

    .app不是必然需要的,目前我看到不需要也是没问题的,只是会报警告(说的不对请轻喷):

    ## Warning: Unable to symbolicate from required binary: /Users/wind/Library/Developer/Xcode/iOS DeviceSupport/10.1.1 (14B100)/Symbols/System/Library/Frameworks/CoreMotion.framework/CoreMotion

    1.首先我们一起找到需要的文件


    1.1获取.dSYM文件

    1.1.1 使用Xcodebuild编译打包

    Xcodebuild编译生成文件

    1.1.2 使用Xcode的Archive导出

    Xcode->product->Archive,右键Show in Finder,如果一个Show in..不能解决,当然就是两个啦。

    1.1.3 使用make编译打包(没用过)

    如果开发团队不使用Xcode编译打包,而是使用make编译生成.o文件,然后打包发布。此时编译过程不会有.dSYM生成,开发者可用使用dsymutil工具               从.o文件中提取符号信息。

    1.2获取.crash文件

    如果用户设置为同步崩溃日志,那可以在Xcode->Window->Organizer->Crashes->Show in Finder里找到.xccrashpoint,右键显示包内容里就可以看到.crash文件

    如果用户没有设置同步崩溃日志,则需要用户把.crash设置为同步崩溃日志。(要么你让用户发给你,如果用户知道怎么发的话.........)


    2.检查UUID


    要想把.crash的堆栈地址转成我们熟知的函数,首先要确定它们UUID是否一致。

    查询UUID方法如下(.app,.dsym):

    dwarfdump —uuid xxx.app

    dwarfdump —uuid xxx.dsym

    .crash文件无法使用上述方式查询。它的UUID需要打开它,并找到Binary Images的位置。

    .crash文件Binary Images

    上述UUID一致的情况下,就可以执行第3步

    3.使用symbolicatecarsh工具查询


    要使用symbolicatecrash肯定要先找到它在哪儿?

    可以在终端使用命令行查找:

    find /Applications/Xcode.app -name symbolicatecrash -type f

    此处为我mac上symbolicatecarsh的位置:

    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

    接着,我们把xxxx.crash 与xxxx.dSYM文件放在同一个文件夹下。

    示例如下:

    测试目录下的文件

    在终端切换到当前目录,之后使用之前找到的symbolicatecarsh工具,输入如下:

    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Vers

    ions/A/Resources/symbolicatecrashtest.crash test.dSYM > test.log

    :命令执行需要时间,如果在命令执行结束后test.log内容为空,可以输入:

    export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

    之后在重新尝试symbolicatecarsh命令。

    4.使用atos查询单个堆栈地址

    其中<>内的参数都是来自.crash文件内,Binary Images,可以参考苹果给的图

    苹果官网截的图

    使用示例:

    atos -arch arm64 -o TheElements.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc


    参考资源:

    苹果官方之崩溃信息如何查看:https://developer.apple.com/library/content/technotes/tn2151/_index.html

    解决symbolicatecrash打出空白.loghttp://blog.csdn.net/my_programe_life/article/details/50686174

    相关文章

      网友评论

      本文标题:iOS crash日志堆栈地址符号化

      本文链接:https://www.haomeiwen.com/subject/kwlbittx.html