博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
符号化
阅读量:7099 次
发布时间:2019-06-28

本文共 2404 字,大约阅读时间需要 8 分钟。

hot3.png

1.首先分析一下crash文件:

 

130433_3XR5_2621781.jpeg

1.a  Incident Identifier : 是崩溃报告的唯一标识符

CrashReporter Key: 是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上。

Hardware Model :标识设备类型。 如果很多崩溃日志都是来自相同的设备类型,说明应用只在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 4s。

Process:对项目的操作权限,上面的是可读可写

Path:崩溃文件的路径

Identifier:项目标识符,就是Bundle Id

Version:版本号

。。。。。。。

2.a 这部分给出了一些基本信息,包括闪退发生的日期Date/Time和时间Launch Time,设备的iOS版本OS Version等。

3.a Exception Type:异常的类型。

Exception Codes :异常错误码
Termination Reason:闪退的原因,比如常见的数组越界啊,什么的。
Triggered by Thread:出现问题在哪个线程,这个比较重要,首先确定在哪个线程中出了问题,然后再去定位。

4.a 这部分提供应用中所有线程的回溯日志。 线程调用的一些,堆栈信息,压根看不懂,所有需要进行符号化处理。

 

 

2.如何将文件一一对应(检查dsym和app以及crash文件是否一致)

AppName代表app的名字,.app文件需要将ipa文件显示包内容,.app文件在payload文件夹下

 

dSYM

$ dwarfdump --uuid AppName.app.dSYM/UUID: 8FFE6FA9-5DC6-3D54-8C16-4D267AA315A5 (arm64) AppName.app.dSYM/Contents/Resources/DWARF/AppName
  •  

.app

$ dwarfdump --uuid AppName.app/AppNameUUID: 8FFE6FA9-5DC6-3D54-8C16-4D267AA315A5 (arm64) AppName.app/AppName
  •  

.crash 文件

$ grep "AppName arm64" t.crash0x100020000 - 0x10123bfff AppName arm64  <8ffe6fa95dc63d548c164d267aa315a5> /var/containers/Bundle/Application/A9D19DFA-9553-412B-A124-F07B0DEE01CF/AppName.app/AppName

 

3.符号化crash文件

注:如果有.xcarchive文件(打包时从包列表进入文件寻找)直接拖入设备即可

注:如果应用ipa包就是在自己的机器上打的,直接把.crash文件拖进Devices -> view device log 即可

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

方法1:

需要使用Xcode符号化 crash log,你需要下面所列的3个文件:

1. crash报告(.crash文件)

2. 符号文件 (.dsymb文件)

3. 应用程序文件 (appName.app文件,把IPA文件后缀改为zip,然后解压,Payload目录下的appName.app文件), 这里的appName是你的应用程序的名称。

 

把这3个文件放到同一个目录下,打开Xcode的Window菜单下的organizer,然后点击Devices tab,然后选中左边的Device Logs。

 

然后把.crash文件拖到Device Logs或者选择下面的import导入.crash文件。

 

这样你就可以看到crash的详细log了

 

方法2:使用命令行工具symbolicatecrash

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

设置环境:export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"  

先用这个命令找到symbolicatecrash位置:/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

把crash文件和dysm文件以及app文件放到一起执行:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash acrash.crash AppName.app > out .log 即可以

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash acrash.crash AppName.app.dSYM >n.crash也可以

 

 

 

 

转载于:https://my.oschina.net/HeroOneHY/blog/1569976

你可能感兴趣的文章
C++继承:公有,私有,保护
查看>>
创建可扩展性系统-2
查看>>
DNS 服务器三种模式搭建和常见问题解答
查看>>
我的友情链接
查看>>
Linux IO和管道练习题
查看>>
2048游戏完整源代码揭秘和下载 (一)
查看>>
gitlab项目数据同步
查看>>
关于Service与Broadcast以及Notification的终于告一段落了
查看>>
VO,PO,POJO的定义和区别
查看>>
Python环境搭建
查看>>
瑞信CDP与HA集群
查看>>
RAID各级别的特性
查看>>
Python学习笔记__7.3章 多重继承
查看>>
爱创课堂每日一题七十天- 说说你对前端架构师的理解?
查看>>
兄弟连第7节课
查看>>
学习笔记(11月15日)
查看>>
JavaWeb21-HTML篇笔记
查看>>
Java之品优购部署_day03(3)
查看>>
前端与移动开发之vue-day4(2)
查看>>
phpcms筛选功能
查看>>