做了快两年的开发了,没有写过博客,最近公司app上架,程序崩溃被拒绝了,可是给的crash文件,又看不出哪里的问题,网上各种搜,终于找到了解决的办法,想想还是写个博客吧,希望给哪些也遇到这类问题的朋友一点帮助。

什么是dSYM文件

Xcode编译项目后,我们会看到一个同名的dSYM文件,dSYM是保存16进制函数地址映射信息的中转文件,我们调试的symbols都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的dSYM文件,位于/Users/<用户名>/Library/Developer/Xcode/Archives目录下,对于每一个发布版本我们都很有必要保存对应的Archives文件。

dSYM文件有什么作用

当我们软件release模式打包或上线后,不会像我们在Xcode中那样直观的看到用崩溃的错误,这个时候我们就需要分析crash report文件了,iOS设备中会有日志文件保存我们每个应用出错的函数内存地址,通过Xcode的Organizer可以将iOS设备中的DeviceLog导出成crash文件,这个时候我们就可以通过出错的函数地址去查询dSYM文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的dSYM文件,这也是为什么我们很有必要保存每个发布版本的Archives文件了。

通过Mac自带的命令行工具解析Crash文件需要具备三个文件

1.symbolicatecrash,Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的位置,将0x开头的地址替换为响应的代码和具体行数。

2.我们打包时产生的dSYM文件。

3.崩溃时产生的Crash文件,例如:*.crash。

下面开始解析

第一步,在桌面新建一个文件夹,一般命名为Crash,然后将.Crash , ,.app.dSYM, symbolicatecrash三个放到这个文件夹里,首先找到.app.dSYM文件,打开xcode,window->Organizer打开之后,找到上传时候对应的版本然后show in Finder

 

到了这个界面之后显示这个包的内容

 

到了这个页面就可以看到.app.dSYM了

 

第二步,找到symbolicatecrash

首先给xcode打一个补丁:命令行运行

/usr/bin/xcode-select -print-path

如果输出"/Developer"或者其他非"/Applications/Xcode.app/Contents/Developer/"的内容,运行下面的命令:

sudo /usr/bin/xcode-select -switch/Applications/Xcode.app/Contents/Developer/

2.查找symbolicatecrash:

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

获取路径,这个命令可能执行的时间长一点,耐心等待一下,找到这个路径后复制下来,前往这个路径就可以找到symbolicatecrash,把它复制下来放到开始建的那个文件夹里,Xcode7.3我当时的路径是/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

第三步,把三个文件都放到那个文件夹里,然后在终端执行命令

1.首先切换到这个文件夹

cd /Users/app/Desktop/crash

2.解析这个Crash文件,*,xx指相应的文件名字,多个Crash文件,重复使用这个命令就行,不过一定要把导出的文件名symbol.text改一下,以免覆盖原来的

./symbolicatecrash ./*.crash ./xx.app.dSYM> symbol.text

3.如果上边的命令不成功,使用命令检查一下环境变量,返回结果是:/Applications/Xcode.app/Contents/Developer/

xcode-select -print-path

4.如果返回的不是上面的结果,需要使用下面的命令设置一下导出的环境变量,然后重新解析就行了

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer

解析完成后,会在Crash文件夹生成一个symbol.text

打开后图中红色部分就是崩溃的地方

 

命令行解析Crash文件的更多相关文章

  1. 使用命令行解析php文件

    使用命令行解析php文件,这样可以调用Log4PHP库中的一些demo,因为默认的输出使用命令行作为输出. 建一个bat文件: echo 以下是使用命令行解析php文件 C:\xampp\php\ph ...

  2. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

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

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

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

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

  5. 在windows下使用cmd命令行对java文件进行编译和执行

    windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...

  6. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  7. python实现命令行解析的argparse的使用

    参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...

  8. 『Argparse』命令行解析

    一.基本用法 Python标准库推荐使用的命令行解析模块argparse 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的optparse.因为argparse是 ...

  9. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

随机推荐

  1. js鼠标经过文字滚动,移开还原

    不说别的,直接贴代码. <div class="kj-scroll" id="countrylist0" onmouseover="wPAa = ...

  2. JAVA 中数据库连接的方法之一

    /** * 数据库连接类 * */ package com.cn.MysqlConnect; import java.sql.Connection;import java.sql.DriverMana ...

  3. matlab 连续读取多个文件

    方法1: 把文件的文件名按一定的规律命名,假如:filename1.txt,filename2.txt,...,fielname100.txt,在读取的时候则可以使用循环: for i = 1:100 ...

  4. JQuery源码解析--callbacks

    (function (global, factory) { factory(global); })(this, function (window, noGlobal) { var rootjQuery ...

  5. flash中字体兼容性

    非谷歌浏览器设置字体font时需设置为该字体的(英文名字)或者(中文名字+可读性消除锯齿), 谷歌浏览器设置字体font时需设置为该字体的(中文名字) 总结:静态文本一般通过选择可读性消除锯齿来能实现 ...

  6. Android 记录和恢复ListView滚动的位置的三种方法

    本文主要介绍记录和恢复listView滚动位置的3种方法(1)记录listView滚动到的位置的坐标(推荐)(2)记录listView显示在屏幕上的第一个item的位置(3)通知适配器数据改变. 有时 ...

  7. EXCEL拼接SQL

    =CONCATENATE("insert into 表名 (字段名1,字段名2)values (3,  '"&C3&"');") 用CONCAT ...

  8. Eclipse中调试Android技巧

    Android eclipse中程序调试 一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的. 步骤如下. 1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键 ...

  9. php 连接 mssql 常见的所有问题

    php连接mssql时 ntwdblib.dllPHP连接MSSQL配置和PHP代码演示 收藏 如果实现了PHP和MySQL链接了,PHP和MSSQL的链接其实很简单: 支持MSSQL的本地链接和远程 ...

  10. NC nc5.x笔记(编辑中)

    一.设置卡片界面下 金额字段负数为红色! /** * 设置卡片界面下 金额字段负数为红色! */ private void repaintBodyMoneyColor(){ if(!isListPan ...