美文网首页
atos解析crash报告

atos解析crash报告

作者: Crazy2015 | 来源:发表于2018-09-10 15:03 被阅读24次

    什么是UUID
    每一个可执行程序都有一个build UUID来唯一标识。Crash日志包含发生crash的这个应用(app)的 build UUID以及crash发生的时候,应用加载的所有库文件的[build UUID]。

    1.那如何知道crash文件的UUID呢?

    grep --after-context=2 "Binary Images:" *crash
    得到如下结果:

    xxPhone_9_7.crash:Binary Images:

    xxPhone_9_7.crash-0x1008fc000 - 0x1040bbfff xxPhone arm64 <06c163900895325fb0cc2218e52bc570> /var/containers/Bundle/Application/0424DF52-AC71-4E4B-BBA2-446C3E224FFB/xxiPhone.app/xxiPhone

    xxPhone_9_7.crash-0x105138000 - 0x105143fff calib arm64 <68fea1fb54ea2td4b885e1049e71e4cf> /var/containers/Bundle/Application/0424DF52-AC71-4E4B-BBA2-446C3E224FFB/JD4iPhone.app/Frameworks/calib.framework/calib

    (请注意这里的0x1008fc000,是模块的加载地址,后面用atos的时候会用到)

    2.如何找到app的UUID

    xcrun dwarfdump --uuid appName.app/appName

    xcrun dwarfdump --uuid xxPhone.app.dSYM
    UUID: C59D97AE-B887-3922-BE2A-E3441A6E1173 (armv7) xxPhone.app.dSYM/Contents/Resources/DWARF/xxPhone
    UUID: 06C16221-8895-325F-B0CC-3318E52BC570 (arm64) xxPhone.app.dSYM/Contents/Resources/DWARF/xxPhone

    3.用atos命令来符号化某个特定模块加载地址

    atos [-o AppName.app/AppName] [-l loadAddress] [-arch architecture]

    xcrun atos -o xxPhone.app.dSYM/Contents/Resources/DWARF/xxPhone -l 0x1008fc000 -arch arm64

    crash文件中有如下两行:
    11 xxPhone 0x0000000103929838 0x1008fc000 + 50518072
    12 xxPhone 0x000000010393ebc0 0x1008fc000 + 50604992

    在执行完xcrun atos -o xxPhone.app.dSYM/Contents/Resources/DWARF/xxPhone -l 0x1008fc000 -arch arm64命令后,接着输入0x0000000103929838 0x000000010393ebc0

    就可以看到
    -[xxWebViewDelegate webView:decidePolicyForNavigationAction:decisionHandler:] (in xxPhone) (xxWebViewDelegate.m:371)
    -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] (in xxPhone) (WKWebViewJavascriptBridge.m:163)

    这样就找到了应用种到底是哪个模块导致的crash问题。

    相关文章

      网友评论

          本文标题:atos解析crash报告

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