美文网首页
解决线上crash

解决线上crash

作者: mkb2 | 来源:发表于2018-04-26 11:40 被阅读83次

    之前有说过如何解决crash,就是非调试情况下的,手机玩着玩着就crash了,当时的那篇文章用的是友盟,今天讲下,用系统自带的解析crash文件,找到crash的地方

    1.先将符号表变成正常的可看的奔溃栈

    a.直接通过Xcode连接手机中获取

    device and simu..

    b.view Device Log
    找到具体的crash文件,有些文件可能根本不是crash,内部标示了,没有crash,这个一定要注意,导出到电脑中

    图片.png

    c.找到symbolicatecrash可执行文件的位置

    在命令行中输入find /Applications/Xcode.app -iname 'symbolicatecrash'

    获取具体的位置

    ➜  ~ find /Applications/Xcode.app -iname '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/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
    
    是我们真机使用的
    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
    

    d.找到.dSYM文件
    这个就是你打包的时候,产生的文件,我们用Jenkins打包,都放到了云端,自己去下载下来就行了

    注意.dSYM对应版本,即和.crash中显示的版本要对应起来。

    e.设置DEVELOPER_DIR

    命令行中
    export DEVELOPER_DIR=`xcode-select -print-path`
    

    f.执行symbolicatecrash命令

    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash path/to/x.crash path/to/y.dSYM > z.crash
    
    如果上边的用了 > z.crash缺没有导出来,那么我们直接在terminal中查看吧,用下面的命令行
    /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash path/to/x.crash path/to/y.dSYM
    
    转换完成之后的崩溃栈,就可以看到很多信息了,这个是奔溃时候的上下文

    2.如何查找具体的问题?

    • 1.表示奔溃的控制器和方法
    • 2.表示的是10进制的汇编偏移量,转成了16进制为0xC51E,但是要记住,我们实际的是带有偏移量的,但是IDA中的是没有偏移量的。
      3.可以直接去代码中查找到 WMBNewFunctionGuideController.m文件中,106行
    IDA中找到具体的函数,然后找到内部的0xC51E位置,只要最后3位能对的上就行,这样可以避免偏移量 Xcode查看代码

    问题总结:
    4s上使用了[self.view.subviews setValue:@"YES" forKey:@"hidden"];代码,其他的手机都行,就4s不行,应该是4s的系统无法将字符串@"YES"变成布尔型的YES导致了crash,4s还是认为他是字符串

    相关文章

      网友评论

          本文标题:解决线上crash

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