对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug。一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还好有几个好心同事下载了,然后果然有两台机器上出现了闪退。真是天无绝人之路,最重要的crash文件有了。下面我就来详细描述一下具体的心路历程以及分析方法。

  iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩溃过的机器,然后打开Xcode,选择Window -> Devices(如果是Xcode6以下,则是Window -> Organizer -> Devices),选择你自己的机器,然后点击View Device Logs,这时候会打开一个小窗口,这就是你机器上至目前为止存的所有app的崩溃信息了。如果是好久没看过这个信息,打开后还要读取好久才能完全读完,总之,找到你的app最后一次崩溃记录,右键导出。(先不要在意下图的信息,我只是随便找了一个)

我们先看一眼导出来的.crash文件,上半部分都是一些基本信息(基本没用),重点看下崩溃部分的记录,如下图(是下图,不是上图!)

看红框里的,隐隐有种不翔的预感,很像是数组越界之类的问题啊,可下边几行写的都是啥,这怎么定位问题啊。先不管了,先在桌面上建个文件夹,就叫crash吧,然后把这个导出的.crash文件扔进去。想要再详细点的记录还缺几样东西呢。。。

  找到你上次发布的ipa(如果实在没有了就再从Archives里导出来一个,但一定要保证是你上次发布用的那个),右键 -> 打开方式 -> 归档实用工具(就是解压缩),然后把Payload文件夹下的.app文件也扔到刚刚的crash文件夹里。

  接下来还需要dSYM文件,还是在Archives里,找到发布用的那个,右键Show in Finder,如图

然后对文件夹中的这个.xcarchive文件右键,显示包内容,就可以看到一个名为dSYMs的文件夹,把里面的.dSYM文件拷出来,还是放到桌面的crash文件夹里。好了,还剩一个重头了,就是标题上说的symbolicatecrash工具。

  symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称)

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

你也可以在终端中输入命令搜索:

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

把这个路径拷贝一下,然后粘到Finder的“前往文件夹”下,前往,就可以看到symbolicatecrash工具了,现在把它也拷到桌面的crash文件夹里。至此,crash文件夹里现在有4个文件了,分别是.app, .crash, .dSYM, symbolicatecrash。接下来就是用终端敲命令,生成更易分析的crash。

  首先用cd命令进入到crash文件夹下,然后输入以下命令

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

上述命令中,"xxxx"和"InOrder"请自行替换成对应的名称。运行,这时候终端可能会报错Error: "DEVELOPER_DIR" is not defined at /usr/local/bin/symbolicatecrash line 53. 这时候在终端中再输入如下(Xcode6.1.app依然是要替换成实际名称)

export DEVELOPER_DIR="/Applications/Xcode6.1.app/Contents/Developer"

然后再跑一下刚刚的那个命令,这时候看一下桌面的crash文件夹下就会多出一个名为“Control_symbol.crash”的文件,这就是可定位问题的crash文件了,我们打开看一下。

现在红框里原来的那些乱七八糟的东西已经“翻译”成了崩溃在具体的哪一个.m文件的哪一行。下面就是进行合理的猜想和调试了,比如我的崩溃就是因为这个第三方时间选择控件使用截取字符串的形式来获得时间,像09:23 PM就被固定的拆成了时、分、上下午标识3段,结果用户使用24小时制的时候,时间就成了21:23,没了上下午标识,array[2]超出下标妥妥的闪退。想想我脑洞也是蛮大的,这种问题原因都被猜到了。。。

  如果还有哪里写得不明白的可以在下边评论中回复~~

[iOS]使用symbolicatecrash分析crash文件的更多相关文章

  1. 使用symbolicatecrash分析crash文件

    对于我们iOS开发者来说,最心碎的事莫过于苹果审核一个星期后上架app store,而第二天就报出闪退bug.一周前我刚经历过,而且最坑的是由于第一次做个人开发,经验不足,没有集成友盟的分析SDK,还 ...

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

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

  3. symbolicatecrash解析crash文件

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

  4. 分析Crash文件

    应用在没有发布前,可以通过打印log很方便的查看错误信息.但是发布后,就需要根据Crash文件来定位了. 将手机连接电脑,通过XCode获取Crash文件.Window ->Devices -& ...

  5. iOS通过dSYM文件分析crash

    重点是dwarfdump --uuid命令 我们在iOS开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应 ...

  6. 【转】 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    当你的应用提交到AppStore或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息 ...

  7. 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    转自:http://www.cocoachina.com/industry/20140514/8418.html 转自wufawei的博客 当你的应用提交到App Store或者各个渠道之后,请问你多 ...

  8. ios系统crash文件分析

    分析crash文件必备条件:crash文件的uuid,app的uuid,dsym文件的uuid必须一致 1> crash文件的uuid为Binary Images:0x4000 - 0x1173 ...

  9. macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号

    一.使用流程 Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数.macOS下的symbolicatecrash也具备相应的功能.对应 ...

随机推荐

  1. Android开发手记(13) 几种Alertdialog的使用

    本文主要讨论七种形式的AlertDialog,及其编写方法. 1.退出 在用户退出的时候提示用户是否退出,含有“确定”和“退出”两个按键. btnExit.setOnClickListener(new ...

  2. iOS中忽略NSLog打印信息(通过PCH文件中定义DEBUG宏解决)

    iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifde ...

  3. 使用C#代码追加和提交文件到SVN服务器

    windows系统下使用svn的命令需要安装一个插件,下载地址:http://sourceforge.net/projects/win32svn/?source=typ_redirect 安装后程序会 ...

  4. 高级应用与部署 —— 主程序与web目录分离

    在网站部署中,考虑网站的安全行问题,可以将您的网站主程序与web目录分离,使主程序在web目录之外,从而提高网站的安全性. 分离方法 1.将phpcms v9中程序主框架目录phpcms移动至web目 ...

  5. phpcms 2008和discuz X3.1实现同步登陆退出论坛(已实现)

    网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了.       以下网络上抄 ...

  6. php 编译安装curl 时候出现问题

    /usr/bin/ld: ext/curl/.libs/interface.o: undefined reference to symbol 'CRYPTO_set_id_callback@@OPEN ...

  7. oldboy第二天学习

    一.上课体验及感受 第二天上课了,从循环到队列,感觉都可以接受,但是当循环遇到队列之后感觉脑袋就有点不够用了.不知道是因为萌新的问题.每个人都这样,还是个人能力不行.总而言之加油努力吧!! 二.循环, ...

  8. Swift—使用try?和try!区别-备

    在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try?  try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方 ...

  9. 虚拟机显卡分配过高的警告(Insufficient video RAM)

    最近机房挪机柜,网线拔拔插插,又在虚拟机上配置了网卡的各项设置,其中一个虚拟机的网站这两天经常无法访问, 于是关注了一下虚拟机的“事件”,发现另外一个跳转网站的警告: 于是去vmware的官网上找到了 ...

  10. file_get_content、fsockopen和curl之间的优缺点

    file_get_content 优点:在抓取单个文件上,效率很高,返回没有头信息的文件. 缺点:在抓取远程文件时,和fopen一样容易出错.在抓取多个跨域文件时,未对DNS进行缓存,所以效率上不不高 ...