今天突然发现了一个解析iOS crash log的好方法,忍不住来分享一下。

相信每个做iOS开发的TX都应该不会对symbolicatecrash陌生,我们第一次遇到真机上产生的崩溃日志时,在网上搜到的大部分教程都告诉我们说要用symbolicatecrash来解析crash log,我信了,所以相当长一段时间内,我都是用这个工具来解析crash log的。

每次都去敲命令来解析crash log本身就是一件很蛋疼的事情,但这还不是麻烦的,最麻烦的是用symbolicatecrash还经常遇到问题:怎么crash log又解析失败了?怎么批量解析crash log?

问题出在方法上,实际上我们完全用不着symbolicatecrash的,因为Xcode中自带的organizer就是很好的解析crash log工具了。

举个例子,如果我们的应用是在自己的机器上编译生成的,把应用装在真机上如果有崩溃产生,把真机通过数据线连接到Mac电脑上,打开Xcode菜单上的Window——Organizer,找到设备的device logs项中的crash log,稍等片刻,你就会发现这里的crash log已经被自动解析过了(大部分情况会自动解析,如果不行请右键点击选择Re-Sysbomlicate)。

但是如果应用不是在自己的编译上生成的,你会发现organizer不会自动解析crash log(除了系统函数)。怎么在这种情况下也让organizer也能自动解析crash log呢?

其实之前的organizer之所以能自动解析你设备上的crash log,是因为它能根据spotlight的索引来找到对应的.app和dSYM文件,对于这一点,我的猜测是在自己的Mac电脑上编译生成应用时,系统自动对其进行了索引。这个索引应该是根据app uuid来索引的。这个uuid可以执行下面的命令得到:

dwarfdump —uuid YourApp.app/YourApp 
dwarfdump —uuid YourApp.app.dSYM

如果要能解析出crash log,crash log中携带的uuid与dSYM文件的uuid必须与app uuid一致。

既然spotlight能自动进行索引,那是不是也可以手动进行索引呢?答案是能,这正是自动解析的关键。手动索引的命令是mdimport。比如,把iOS应用的.app和.dSYM文件放到一个文件夹中,执行命令mdimport foldername就可以。命令执行完成后再用刚才的organizer去查看crash log,你会发现也能自动解析了。

这意味着什么呢?意味着你把应用所有版本的.app和.dSYM文件放入一个专门的文件夹中,只要mdimpor这个文件夹,以后的organizer就能自动解析出你所有的crash log。

好处不仅仅是这一点。organizer还有一个import功能,借助这个功能,我们可以把其它Mac电脑上的crash log导入到自己电脑中的organizer,然后就可以自动解析。更好的是,用这个功能可以批量导入收集到的crash log,然后我们就可以批量解析所有的crash log。

比起用symbolicatecrash,这种方法简便了许多,从现在起,你可以抛弃symbolicatecrash了。但其实这还不是最好的方法,目前先进的方法是用crash report管理系统来管理所有的crash,比如使用QuincyKit, Crashlytics, Flurry等来进行管理,有时间自己也研究研究。

Posted by wonderffee Aug 14th, 2013

原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

别用symbolicatecrash来解析crash Log了的更多相关文章

  1. iOS crash log 解析

    iOS开发中,经常遇到App在开发及测试时不会有问题,但是装在别人的设备中会出现各种不定时的莫名的 crash,因为iOS设备会保存应用的大部分的 crash Log,所以可以通过 crash Log ...

  2. Xcode自带工具symbolicatecrash解析Crash文件

    项目中遇到一台手机运行测试包闪退的现象,而且是一个设备闪退其他设备没有再现的情况 可以看到Crash信息,但是指定的问题给出的是16进制内存地址,根本无法定位问题发生在哪个类的哪个函数中 所以需要解析 ...

  3. symbolicatecrash解析crash文件

    导出crash文件 Xcode -> Window -> Devices and Simulators -> View Device Logs ,然后选中导出. 找到.app文件和. ...

  4. iOS crash log 解析 symbol address = stack address - slide 运行时获取slide的api 利用dwarfdump从dsym文件中得到symbol

    概述: 为什么 crash log 内 Exception Backtrace 部分的地址(stack address)不能从 dsym 文件中查出对应的代码? 因为 ASLR(Address spa ...

  5. 浅谈 iOS 之 Crash log 符号化

    其实,对于做移动 APP 开发的同学来说,质量和体验都是同等重要的.一个 APP 应用如果经常「闪退」,是产品质量很差的一个体现,那么用户体验就更不用再提了. *** 上面是笔者截取的国外一家公司对用 ...

  6. iOS解析crash日志:

    iOS解析crash日志:我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是rele ...

  7. iOS- 全方位解析.crash文件崩溃报告

    1.前言 想来每个iOS攻城狮,都免不了要接触.crash文件 那么什么是.crash文件? iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者 ...

  8. iOS 几种常用的 crash log 崩溃信息调试方法

    前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...

  9. ios Crash Log 分析汇总

    方法一: 1.xcode 有自带的symbolicatecrash,可以将.crash文件中的16进制地址转换成可读的函数地址. symbolicatecrash位于: /Applications/X ...

随机推荐

  1. java获取路径的方法

    package com.zjf; import java.io.File; public class GetPath { public static void getPath() { //方式一 Sy ...

  2. SqlServer2012 数据库的同步之发布+订阅

    文章参考了百度过的文章,因为版本不同,操作中也遇到了很多问题,现在整理一下,希望对各位朋友有所帮助. 发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在 ...

  3. 终于解决:升级至.NET 4.6.1后VS2015生成WCF客户端代理类的问题

    在Visual Studio 2015中将一个包含WCF引用的项目的targetFramework从4.5改为4.6.1的时候,VS2015会重新生成WCF客户端代理类.如果WCF引用配置中选中了&q ...

  4. 作业三:PSP记录个人项目耗时情况

    PSP2.1        Personal Software Process Stages Time Planning  计划    20min              Estimate 估计开发 ...

  5. C#抓取网页HTML内容

    网上很多内容采集工具,今天就自己试着写一个,发现C#可以轻松的抓去网页的内容,进而通过正则来分离出自己感兴趣的数据.下面是抓去网页内容的代码: using System; using System.C ...

  6. FusionCharts简单教程(三)-----FusionCharts的基本属性

          通过前面两章的讲解我们可以制作出简单的图像,但是有时候我们需要对图像进行一个精确的规划,比如设置背景颜色.设置提示信息.设置间隔颜色等等,这时就需要我们对FusionCharts的细节有比 ...

  7. How to install java and eclipse on linux

    First of all, download from the website of java. I download 'jdk-8u102-linux-i586.tar.gz' unzip it t ...

  8. php版的redis操作库predis操作大全

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/146.html predis是php连接redis的操作库,由于它完全使用 ...

  9. Java-异常处理练习

    1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理. package Yichang; public class Te ...

  10. svn:previous operation has not finished

    svn提交遇到一个恶心的问题,cleanup也不行. 错误如下: Previous operation has not finished; run 'cleanup' if it was interr ...