解决线上crash

之前有说过如何解决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)