iOS闪退日志的收集和解析

  在开发过程中往往会遇见有个别用户或者测试人员反馈app的闪退现象,而项目一般集成的统计闪退的第三方库是笼统的统计了所有的闪退信息,无法去定位某一个用户提出的某一个时间点的某一个闪退问题,于是乎这个时候需要我们能快速的去获取指定用户提出的指定闪退,并能够解析闪退日志,快速的定位到问题。下面将自己的做法大概的做个总结(可能还有别的方法,但是我觉得下面讲述的方法已经足够了)。

一、收集闪退日志

  先和用户确定iPhone是否打开如下设置(以iOS12.0的iPhone为参考):

  设置->隐私->分析->共享iPhone分析->与应用开发者共享

  只有打开了上述设置闪退日志才会被收集,然后进入设置->隐私->分析->分析数据,找到以自己项目开头拼接出现闪退大致时间点文件名的ips文件。

二、解析闪退日志

  1.如果还能找到用户反馈有问题的app 当时打包时相对应的项目源码,那么就很简单了

  获取到的.ips文件双击打开是没有解析的日志,现在需要修改后缀名为.crash,然后双击打开出现下面的弹窗

可以选中当时打包的项目,预览并且打开,这时候你会发现打开后的项目会显示闪退的地方。

  没错,就是这么简单。不过前提条件是你还有当时打包的项目源码,不然要是用改动过当前闪退所在文件的源码,定位的位置是不对的。

  2.不能找到打包时的项目源码,但是可以找到当时打包的dSYM文件

具体步骤:

1.首先在桌面新建一个文件夹crashFile,用于存放解析闪退日志用到的文件。

2.找到前面获取到的.ips文件,拷贝.ips文件放到crashFile中

3.获取symbolicatecrash文件。

找到当时打包所用的xcode(可能笔记本安装了好几个Xcode),然后进入下面的路径:/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

拷贝symbolicatecrash工具拷贝到crashFile中

4.获取dSYM文件

从当时打包的xcode->Window->Organizer->Archives找到当时的xcarchive文件,选中xcarchive文件右键点击【显示包内容】,拷贝dSYMs文件下的.dSYM文件,放到crashFile中。

至此,crashFile文件中总共有3个文件:.ips文件、symbolicatecrash工具、.dSYM文件。

5. 打开终端,cd到crashFile文件夹中

6. 输入命令

./symbolicatecrash Agent-2020-02-21-124913.ips Agent.app.dSYM > crash.log

这时候会发现crashFile文件夹下多了个crash.log文件

双击打开crash.log文件,你会发现崩溃信息已经成功解析

好了,大功告成!!!

下面将附上参考的地址(可以验证闪退的ips文件和dsym文件对应的app是否是同一个):

https://www.cnblogs.com/mukekeheart/p/9449189.html

https://hacpai.com/article/1533042075262

https://www.jianshu.com/p/e5ad706e4196

原文地址:https://www.cnblogs.com/jingxin1992/p/12342168.html

时间: 2024-07-31 00:53:48

iOS闪退日志的收集和解析的相关文章

ios Crash闪退日志获取和上传至服务器

最近客户有个要求:人家谁谁有crash日志捕获和上传,我们是不是也要做一个...  人家谁谁.....还有什么什么功能........ 正好最近也在研究这方面东东,所以整理一下分享给大家:如何用程序获取Crash日志 并 可以上传Crash日志. 首先我们整理经常会闪退的异常哪些:数组越界.空引用.引用未定义方法.内存空间不足等等. 友盟分享后台是可以看到crash的日志,如下图: 开始研究的时候,我有两个疑问: 1.如何获取crash闪退日志(工具和程序两种方法): 2.解析crash: 说明

iOS闪退捕获

主要内容 一.闪退信息传递过程 二.Unix信号捕获异常 三.NSUncaughtExceptionHandler捕获异常 四.总结 五.参考链接 一.闪退信息传递过程 底层内核产生Mach异常->通过转换发出Unix信号:所以我们可以通过监听Unix信号来获得闪退信息,当然如果通过捕获Mach异常来获取会更准确,毕竟少了一步转换嘛 二.Unix信号捕获异常 1.关于信号 1) SIGHUP  本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一sessio

阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析

一:问题描述    闪退(Crash)是客户端程序在运行时遭遇无法处理的异常或错误时而退出应用程序的表现,请从crash发生的原因分类与解决方法.在出现crash后如何捕捉并分析异常这两个问题给出自己的解决方案.    我们以Android平台为例,介绍下如何捕获Android应用的闪退信息,以帮助我们定位和解决导致闪退的问题代码.二:Android中的闪退    在讲解Android中的闪退之前,我们先来简单的复习下Java中的异常.1.Java中的异常    Java中的异常层次结构如下图所

多线程导致的iOS闪退分析

前段时间做了一个APP,在测试的时候遇到了很奇怪的闪退情况. 这个APP是有关声音处理的:设备一边录音,一边对声音进行处理.所以需要2个线程,一个线程将录音保存下来,另一个处理保存下来的声音.测试的时候,会在1~10min之内,不定时.无预兆的出现闪退的情况,报的错也各不一样,有的是 1)"NSGenericException 'Collection was mutated while being enumerated" 或者: 2)"pointer being freed

iOS Crash获取闪回日志和上传server

首先我们整理常常会闪退的异常哪些:数组越界.空引用.引用没有定义方法.内存空间不足等等. 怎样获取crash闪退日志 -- 工具查看 先看第一个问题怎样查看,我搜索的方法有下面几个: 第一个方法:XCode  的菜单Window->Organizer    选择Devices  ->  选中的手机 -> 点击手机名称左边的箭头 会等到例如以下图 注意对照一下红色框框内容,这个日志也基本上上告诉你crash的原因了. 另外一种方法 打开手机 - > 设置 -> 隐私 - >

Unity3D游戏在iOS上因为trampolines闪退的原因与解决办法

http://7dot9.com/?p=444 http://whydoidoit.com/2012/08/20/unity-serializer-mono-and-trampolines/ 确定具体原因 那么好吧,打一个测试版本再来看,然后再等着崩溃,查看崩溃日志吧,最终看到的崩溃日志中,崩溃线程输出信息如下: Thread 27 Crashed: 0 libsystem_kernel.dylib 0x38e671fc __pthread_kill + 8 1 libsystem_pthrea

关于iOS程序测试时候闪退问题

关于项目闪退 从网上查到的归总有这些东东是引起闪退的 1.函数无限递归爆栈(表视图返回Cell和返回行高的方法互相调用) 2.某对象无法解析某个方法(没做类型转换.或者代理没实现某个方法) 3.访问了某个已经被释放的对象(ARC之后不太有) 4.从Bundle加载了不存在或者不支持的对象(图片素材之类的) 5.子线程阻塞主UI线程过久 但是今天发现了另外一个原因也能引起闪退,那就是手机越狱...如果你碰到用越狱手机做测试的程序测试,会是什么心情呢? 解决: 可以加友盟统计或者是日志分析 如果测试

phonegap创建的ios项目推送消息出现闪退现象

使用phonegap创建的ios项目,推送消息时,当程序在前台运行或者在后台运行状态下,推送消息过来,可以解析并且跳转: 但是在程序从后台退出的状态下,当消息推送过来的时候,点击通知栏,打开程序,程序竟然出现了”闪退“现象. 经过一番排查,发现原来phonegap创建的项目默认是没有自动引用计数的(非arc机制),而我们在 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictio

iOS 启动连续闪退保护方案

引言 “如果某个实体表现出以下任何一种特性,它就具备自主性:自我修复.自我保护.自我维护.对目标的自我控制.自我改进.” —— 凯文·凯利 iOS App 有时可能遇到启动必 crash 的绝境:每次打开 App 都闪退,无法正常使用App. 为了尝试解决这个问题,微信读书开发了 iOS 连续闪退保护工具:GYBootingProtection,检测连续闪退,在连续闪退出现时,尝试自修复 App: 本文探讨了连续闪退问题的产生原因.检测.修复机制,以及如何在你的项目中引入.测试和使用 GYBoo