• iOS Crash日志符号化


    1.为什么要符号化:
    IOS程序在真机运行程序出现crash状况时,机器会自动产生log文件,它包含了在程序crash之前的运行逻辑,分析carsh文件,有效的解决程序在真机上的问题,保证程序良好的稳定性,但是这个crash文件多数是显示出现问题的地址和一些系统的消息,无法查看程序中对应的崩溃地点。所以需要符号化转化为我们熟悉的代码方便定位问题。
    xxx.crash的原日志:

    0 libsystem_kernel.dylib 0x32a50dfc __pthread_kill + 8
    1 libsystem_pthread.dylib 0x32aced33 pthread_kill + 59
    2 libsystem_c.dylib 0x329f0905 abort + 73
    3 libsystem_c.dylib 0x329d0365 __assert_rtn + 89
    4 --             0x002d745d '''0x4000''' + 2962525
    5 --             0x0021b75b '''0x4000''' + 2193243
    6 --             0x0021af7d '''0x4000''' + 2191229
    7 Foundation 0x25903d6b __NSThreadPerformPerform + 383
    8 CoreFoundation 0x24bb9d55 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13
    9 CoreFoundation 0x24bb9163 __CFRunLoopDoSources0 + 215
    10 CoreFoundation 0x24bb77c9 __CFRunLoopRun + 769
    11 CoreFoundation 0x24b053bd CFRunLoopRunSpecific + 473
    12 CoreFoundation 0x24b051cf CFRunLoopRunInMode + 103
    13 GraphicsServices 0x2bebd0a5 GSEventRunModal + 133
    14 UIKit 0x28114f9d UIApplicationMain + 1437
    15 --             0x00350615 0x4000 + 3458581
    16 libdyld.dylib 0x3298aaad start + 1

    符号化后:
    0 libsystem_kernel.dylib 0x32a50dfc __pthread_kill + 8
    1 libsystem_pthread.dylib 0x32aced33 pthread_kill + 59
    2 libsystem_c.dylib 0x329f0905 abort + 73
    3 libsystem_c.dylib 0x329d0365 __assert_rtn + 89
    4 --             0x002d745d -'''[Middleware fundOpenInfo:]''' + 3637
    5 --             0x0021b75b -'''[FundInfoController setInfoData:]''' + 135
    6 --             0x0021af7d -'''[FundInfoController onSkyReceive:]''' + 421
    7 Foundation 0x25903d6b __NSThreadPerformPerform + 383
    8 CoreFoundation 0x24bb9d55 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13
    9 CoreFoundation 0x24bb9163 __CFRunLoopDoSources0 + 215
    10 CoreFoundation 0x24bb77c9 __CFRunLoopRun + 769
    11 CoreFoundation 0x24b053bd CFRunLoopRunSpecific + 473
    12 CoreFoundation 0x24b051cf CFRunLoopRunInMode + 103
    13 GraphicsServices 0x2bebd0a5 GSEventRunModal + 133
    14 UIKit 0x28114f9d UIApplicationMain + 1437
    15 --             0x00350615 main (main.m:18)
    16 libdyld.dylib 0x3298aaad start + 1

    显然,符号化后能够精确的定位到代码级的崩溃语句。

    2.符号化crash日志需要3样东西:

    1).crash日志本身(如:example.crash)

    1/可以从iTunes Connect(Manage Your Applications – View Details – Crash Reports)获取普通用户的crash日志
    2/自己的手机可以连接到iTunes同步后,在电脑中查看crash文件。

    2).crash日志所对应的.app包(如:example.app)
    如果你有的是.ipa包,你可以解压后在Payload/文件夹下获得.app包

    3).crash日志多对应的.dSYM包
    .app必须和.dSYM对应(打包为xcarchive时,同时产生)。

    将上面三个文件放在同一个文件目录下面:


    3.symbolicatecrash是xcode自带的工具,为了方便调用,可以做一个快捷方式,方便在任意路径下调用

    首先在termail下,输入:

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

    用来查找symbolicatecrash的真实位置。

    (这个位置会随着系统的更新,系统修改)

    以我的机器为例,会返回如下路径:

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

    下一步建立快捷方式:

    sudo ln -s /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin/symbolicatecrash


    4.使用symbolicatecrash

    在termail下,进入包含xxx.crash xxx.app xxx.dSYM的文件夹目录
    symbolicatecrash xxx.crash xxx.app > crash.log

    如果遇到 "DEVELOPER_DIR" is not defined 的报错,执行以下命令:
    export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

    得到符号化后的文件。

  • 相关阅读:
    PHP中的list方法
    PHP通过引用传递参数
    PHP浮点数的精确计算BCMath
    cssViewer牛逼的chrome插件
    Chrome浏览器插件VisualEvent,可以方便的查看页面绑定的事件
    Javascript水平提升
    360良心制作fonts.useso.com
    PHP函数htmlspecialchars_decode
    ecshop移动端支付宝支付对接
    转:阿里旺旺导致python安装包失败的解决办法
  • 原文地址:https://www.cnblogs.com/nanoCramer/p/4253826.html
Copyright © 2020-2023  润新知