zoukankan      html  css  js  c++  java
  • 查看iOS应用crash日志

    基本操作:

    1、电脑安装好Xcode,连接好手机设备

    2、打开Xcode,点击Window-Devices and Simulators

    3、选中手机设备,点击View Device Logs,即可查看手机crash日志

    这里有个问题,我们打印出来的crash日志里面,有代码的函数名,但有些却只有函数地址。

    原因就在于我安装到手机上的app并不是由我当前这台电脑编译打包出来的,没有**.app.dSYM这个文件,所以根本没有办法把地址同步解析出来。

    处理方法:

    1、在桌面创建一个Crash文件夹,然后去编译打包的机器上打开Xcode-Window-Organizer,在Archives找到App,右键Show in Finder

    2、复制**.ipa和**.app.dSYM到Crash文件夹

    3、把symbolicatecrash文件(找到文件的方法见最下面)以及待解析的**.crash文件也一并复制到Crash目录下

    4、检测dYSM文件和crash文件是否对应

    从终端进入到刚刚创建的Crash文件中,输入dwarfdump --uuid **.app.dSYM。如果输出的uuid和crash文件中的一致,则可以解析出正确的crash文件。crash文件中的uuid位于Binary Images中的第一行尖括号内。

    5、执行命令:./symbolicatecrash **.crash **.app.dSYM > crashLog.crash

    如果解析成功了,就会有函数名了,像下面这样

     

     注意,一般情况下,第一次使用symbolicatecrash会产生一个error,如下的错误信息

    Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

     解决办法是输入 export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

    再执行 ./symbolicatecrash **.crash **.app.dSYM > crashLog.crash 就能解析了。

    怎样正确找到需要的symbolicatecrash文件呢?

    首先要知道一点,之所以在View Device Logs面板可以看到crash日志,主要的功臣就是一个叫symbolicatecrash的可执行文件。集成在Xcode中的symbolicatecrash有点类似于集成在Android Studio中的adb工具包一样,并且两者都是可以单独拿出来使用的。

    首先,找到symbolicatecrash文件的位置:find /Applications/Xcode.app -name symbolicatecrash -type f

    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

    /Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

    /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

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

    Xcode6.0之前:

    "Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKit.framework->Versions->A->Resources"

    或者

    "Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKitBase.framework->Versions->A->Resources"

    Xcode6.0之后,改成 "Contents/SharedFrameworks"

    只要找到"symbolicatecrash" 文件, 复制然后粘贴到一个 "Crash" 文件夹里面。

    这里我用的是Xcode11,所以使用的是最后一个,把它拷贝到Crash文件夹就ok了。

    假如查看crash log中的崩溃线程是这样的:

    Thread 0 Crashed:
    0   libobjc.A.dylib               0x00003ec0 objc_msgSend + 24
    1   MyApp               0x000036d2 0×1000 + 9938

    我们得到了用户发生崩溃情况的内存地址:0x000036d2

    然后回到我们应用程序的build目录,目录下一定要包含**.app和**.app.dSYM两个文件。在控制台使用dwarfdump命令,就能解析出内存地址,如:

    dwarfdump –lookup 0x000036d2 –arch armv6 MyApp.app.dSYM

  • 相关阅读:
    linux_ext4恢复超级块.txt
    bayaim_Centos7.6_mysql源码5.7-多my.cnf_20190424.txt
    bayaim_Centos7.6_mysql源码5.7-multi_20190424.txt
    zhy2_rehat6_mysql04
    zhy2_rehat6_mysql03
    Neo4j安装,入门到深入了解完整教程
    程序员千万不要裸辞,对你没有任何好处
    减薪是变相的裁员所以我还是走吧
    python正则表达式匹配中文日期时间
    python用正则表达式匹配字符串里的日期
  • 原文地址:https://www.cnblogs.com/mgzc-1508873480/p/10628195.html
Copyright © 2011-2022 走看看