2016-07-06 17:27:57 safiri 阅读数 1109

简书地址

今天审核AppStore被拒,说是有crash错误,并给了.crash文件。但是真机调试模式下没有崩溃,但是在AdHoc的版本下会崩溃,至今不知道为什么。所以我现在想到的只能通过.crash寻找崩溃咯。��

经过一番折腾,找到了问题(一个粗心造成的问题,还是不知道为何真机调试不会出现这问题)。故现在想整理一个详细的笔记:

崩溃分析方式:命令行解析Crash文件

通过Mac自带的命令行工具解析Crash文件需要具备三个文件

  • symbolicatecrash,Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。
  • 我们打包时产生的dSYM文件。
  • 崩溃时产生的Crash文件。

1、获取.crash文件

获取崩溃信息方式:

  • 使用友盟、蒲公英等第三方崩溃统计工具。
  • 自己实现应用内崩溃收集,并上传服务器。
  • Xcode-Devices中直接查看某个设备的崩溃信息。
  • 使用苹果提供的Crash崩溃收集服务。

这篇文章先只用第四个方式-审核被拒给我的.crash文件,其他方式以后讨论。

2、获取 .app 和 .app.dSYM 文件

2.1、步骤:

1、Xcode-Window-Organize找到要检查的对应Archives找到App-右击-Show in Finder

2、右击 .xcarchive 文件-显示包内容

3、分别复制dSYMs文件夹下的 **.app.dSYM 文件和 Products->Applications文件夹下的 app文件放入 .crash 文件所在的crash文件夹中(文件夹自己建的)。

2.2、dSYM 符号集介绍:

  • 符号集是我们对ipa文件进行打包之后,和.app文件同级的后缀名为.dSYM的文件,这个文件必须使用Xcode进行打包才有。
  • 每一个.dSYM文件都有一个UUID,和.app文件中的UUID对应,代表着是一个应用。而.dSYM文件中每一条崩溃信息也有一个单独的UUID,用来和程序的UUID进行校对。
  • 我们如果不使用.dSYM文件获取到的崩溃信息都是不准确的。
  • 符号集中存储着文件名、方法名、行号的信息,是和可执行文件的16进制函数地址对应的,通过分析崩溃的.Crash文件可以准确知道具体的崩溃信息。

当程序崩溃的时候,我们可以获得到崩溃的错误堆栈,但是这个错误堆栈都是0x开头的16进制地址,需要我们使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化,就可以得到详细崩溃的信息。

3、获取symbolicatecrash工具

1、打开终端输入以下命令:

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

我找到的是:

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

2、用命令将symbolicatecrash拷贝到桌面的crash文件夹里面,与.app和.app.dSYM放一起

cp /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Users/***/Desktop/crash

4、开始命令行解析Crash文件

1、打开终端用命令切换到桌面的crash目录下:

cd /Users/***/Desktop/crash

2、执行命令

./symbolicatecrash /Users/***/Desktop/crash/*.crash /Users/***/Desktop/crash/*.app.dSYM > jieguo.crash

2.1、 如果上面命令不成功,使用命令检查一下环境变量

xcode-select -print-path

返回结果:

/Applications/Xcode.app/Contents/Developer/

如果不是上面的结果,需要使用下面命令设置一下导出的环境变量,然后重复上面解析的操作。

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

3、解析完成后会生成一个新的.Crash文件,这个文件中就是崩溃详细信息。

解析前

解析后

2015-05-25 16:37:56 sun377129893 阅读数 626

1.前言  

想来每个iOS攻城狮,都免不了要接触.crash文件
那么什么是.crash文件?
iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩溃过的机器,然后从崩溃过的机器上导出.crash文件
 

2.如何解析.crash文件  

我们先看一眼导出来的.crash文件,重点看下崩溃部分的记录
如下图
显然从这图里,我们没法定位出具体的错误,和崩溃的具体行数。
我们得到是个二进制的报告,这时候我们需要对它进行反编译。
对.crash文件进行反编译我们需要用到三个文件,缺一不可
 

2.1.找到发布app时的.ipa文件(就是你打包app上传到商店里的那个文件)  

2.2.找到Archive时生成的.dSYM文件  

Show in Finder后对文件夹中的这个.xcarchive文件右键,显示包内容,就可以看到一个名为dSYMs的文件夹,把里面的.dSYM文件拷出来
 

2.3.将.ipa、.crash、.dSYMs 文件放在同一个文件夹(例如:创建一个bugcrash文件夹)  

2.4.打开你的xcode,然后打开你发布时的代码(记住必须保证是你发布时的代码,如果不是的话,可能会出现指向的崩溃行数有误,或者无法解析出来的问题)  

 

3.利用xcode自带re-symbolicate解析崩溃报告  

 
点击Devices进去
 
 
然后点击View Device Logs 进去
 
 
 
 
现在打开bugcrash文件夹,然后把.crash文件拖入右框中然后选中右键re-symbolicate log进行解析
大约1-10秒中之后,我们就能发现之前的二进制数变成了我们想要看到的具体行数和具体的.crash原因.
 
 

4.如果xocde自带的Re-symbolicate仍无法解析,那么我们需要利用symbolicatecrash借助命令行手动解析  

symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称)
/Applications/Xcode6.1.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
把这个路径拷贝一下,然后粘到Finder的“前往文件夹”下,前往,就可以看到symbolicatecrash工具了,现在把它也拷到桌面的crash文件夹里。至此,crash文件夹里现在有4个文件了,分别是.app, .crash, .dSYM, symbolicatecrash。接下来就是用终端敲命令,生成更易分析的crash。
./symbolicatecrash /Users/xxxx/Desktop/bugcrash/InOrder.crash /Users/xxxx/Desktop/bugcrash/InOrder.app.dSYM > Control_symbol.crash
上述命令中,"xxxx"和"InOrder"请自行替换成对应的名称。运行,这时候终端可能会报错Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 这时候在终端中再输入如下(Xcode6.1.app依然是要替换成实际名称)
然后再跑一下刚刚的那个命令,这时候看一下桌面的crash文件夹下就会多出一个名为“Control_symbol.crash”的文件,我们打开看一下。和刚刚一样。
 

 
2016-08-22 19:51:04 xiaofei125145 阅读数 1444


xcode7.3   命令行工具 symbolicatecrash 在如下目录中

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

接着需要三个文件

1. 崩溃日志xxx.crash:

Xcode->Window->Devices,选中设备,点击View Device Logs,然后可以看到好多日志,你可以根据时间来判断需要导出哪个日志,选中一个crash日志,右击选择Export log,然后就可以导出日志为aaa.crash,复制到crash文件。

2. 对应的 xxx.app.dSYM文件或者xxx.xcarchive :

打完包之后 注意 备份上述文件中的一个 (xxx.xcarchive  内部是包含 xxx.app.dSYM 的)。


3. symbolicatecrash工具:

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


创建一个 crash文件目录吧,将上述三个文件放入 crash文件目录内。

然后,打开终端,cd到 crash文件目录(可以直接把文件拖到终端,就可以看到crash的路径)


可以用 dwarfdump --uuid xxx.app.dsym 命令先查看一下 dsym 的  uuid如下:

$ dwarfdump --uuid imeituan.app.dSYM
UUID: 846F3B51-91C1-30BD-B725-E77E6544C285 (armv7) imeituan.app.dSYM/Contents/Resources/DWARF/imeituan
UUID: 50232D18-8497-388F-B949-F4128F174C9A (arm64) imeituan.app.dSYM/Contents/Resources/DWARF/imeituan

将上面的 50232D18-8497-388F-B949-F4128F174C9A 去掉 中间横线后 和 

 和 xxx.crash 文件内部 Binary Images: 内对应 imeituan 段的 50232d188497388fb949f4128f174c9a 是一致的 。

Binary Images:
0x100038000 - 0x103607fff imeituan arm64  <50232d188497388fb949f4128f174c9a> /var/containers/Bundle/Application/C58C...


如果不一致,说明 dsym 文件 不匹配。



接着输入

./symbolicatecrash ./xxx.crash ./xxx.app.dSYM > new_symbol.cash

运行完上面这句可能会出现以下问题:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 60.

解决方法是输入以下命令:export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

然后再重复执行

./symbolicatecrash ./xxx.crash ./xxx.app.dSYM > new_symbol.cash


没问题的话会 在  crash文件目录下 就多了个new_symbol.cash文件,这个就是符号化之后的crash文件了


2016-09-18 14:15:57 iOSZZZh 阅读数 551
下面建议如何用symbolicatecrash工具分析iOS Crash文件:


一、在桌面创建一个crash文件夹
1.Xcoe-Window-Organize找到Archives找到App-右击-Show in Finder




 

2.复制.app和.app.dSYM到crash夹文件:右击..xcarchive文件-显示包内容
如图:

 



 

复制好以后如图:

 



二、首先找到symbolicatecrash工具存放的地址
1.打开终端输入以下命令:
find /Applications/Xcode.app -name symbolicatecrash -type f

你会找到:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/./symbolicatecrash


2.用命令将symbolicatecrash拷贝到桌面的crash文件夹里面,与.app和.app.dSYM放一起
cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /Users/angel/Desktop/crash

如图:

 

3.将Crash文件也拷到当前文件夹里面
如图:

 


三、执行symbolicatecrash
1.打开终端用命令切换到桌面的crash目录下:
cd /Users/你的电脑名称/Desktop/crash

2.执行命令
./symbolicatecrash /Users/angelseahappiness/Desktop/crash/Control_2014-01-13-111838_Lynns-iPad3.crash /Users/angel/Desktop/crash/Control.app.dSYM > Control_symbol.crash

这时候终端有可能会出现:Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 60.

3.输入命令:export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer" 


4.再执行./symbolicatecrash /Users/angelseahappiness/Desktop/crash/Control_2014-01-13-111838_Lynns-iPad3.crash /Users/angel/Desktop/crash/Control.app.dSYM > Control_symbol.crash
这时候终端将会进行处理了


5.将终端完成以后,在crash文件夹里面会多出一个文件Control_symbol.crash:这个就是最终的文件,可以查看bug所在的
如图:


转自:http://www.cocoachina.com/bbs/read.php?tid=180736

2015-07-24 16:04:33 qq348931837 阅读数 876

分析本地crash报告:

1、Xcode->Devices->View Device Logs->Re-Symbolicate Log;

2、.app, .crash, .dSYM, symbolicatecrash 放在一起,执行终端命令:

symbolicatecrash文件位置:

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


./symbolicatecrash /Users/xxxx/Desktop/bugcrash/InOrder.crash /Users/xxxx/Desktop/bugcrash/InOrder.app.dSYM > Control_symbol.crash


通过内存地址分析友盟错误报告:

cd /Users/seeko/Downloads/xxxxxx2.0.0_apps_0605_2104\ 13-6-5\ 下午9.02.xcarchive/dSYMs/xxxMovie.app.dSYM/Contents/Resources/DWARF

执行终端命令:atos -arch armv7 -o xxxMovie 内存地址

.dSYM解析.crash

阅读数 233

.dSYM文件解析.crash

博文 来自: liu_wen_dong
没有更多推荐了,返回首页