得到.crash 后的处理

本文详细介绍使用symbolicatecrash工具分析iOS Crash日志的方法。包括准备必要的文件、定位symbolicatecrash工具、执行分析命令等步骤。
下面建议如何用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

虽然给定引用中未直接提及发版过程中出现crash处理方法,但可以从系统Crash的分类和处理流程中得到一些启示。 对于不同类型的Crash,其处理思路有一定差异。Java层面(Framework/App)的Crash往往是通过抛出未捕获异常导致的。当发生未捕获异常时,系统会进行捕获并进入crash流程,如在app里若没有有效catch exception,系统会接管处理。在代码层面,可通过深入到 `handleApplicationCrash` 方法来理解其处理逻辑,如在该方法中会查找应用进程记录,确定进程名等操作,其代码示例如下: ```java public void handleApplicationCrash(IBinder app, ApplicationErrorReport.CrashInfo crashInfo) { // 注释1 ProcessRecord r = findAppProcess(app, "Crash"); // 注释2 final String processName = app == null ? "system_server" : (r == null ? "unknown" : r.processName); // 注释3 handleApplicationCrashInner("crash", r, processName, crashInfo); } ``` 对于Native Crash(C/C++层面),由于是介于系统framework层与Linux层之间的一层,处理时可能需要结合系统底层的调试工具和方法。而Kernel Crash很多情况是发生Kernel panic,往往是驱动或者硬件出现故障,需要对驱动和硬件进行排查和修复。 在发版过程中,若出现crash,首先要判断crash的类型。如果是Java层面的Crash,检查代码中是否有未捕获的异常,特别是常见的空指针异常(NullPointExection)、索引越界异常(IndexOutBoundsException)等,确保在开发过程中合理使用try…catch语句来捕获异常。对于Native Crash和Kernel Crash,需要更专业的系统开发和调试知识,可能需要借助系统日志、调试工具来定位问题所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值