背景

日常迭代开发中,我们用真机测试过程遇到崩溃问题时,有时候因为没有线上堆栈的监控日志,需要人工手动去解析定位堆栈信息

场景

需要手工解析日志一般有两种场景,一种是我们开发者自己的手机闪退了;另一种是别人的手机闪退了。两者主要的区别就是前者是开发者有自带的Xcode,后者可能是测试或用户不太方便连接到Xcode。

方案

开发者本人手机崩溃堆栈分析

针对第一种场景,即崩溃的手机即是开发者本人手机,相对就比较简单。

1、连接手机通过Xcode导出crash日志文件

在MAC电脑中打开Xcode开发工具,选择设备和模拟器(Devieces and Simulators)

2、选中真机设备,查看设备日志

3、选中崩溃的应用导出奔溃日志

导出生成一个xxx.crash

4、查找symbolicatecrash崩溃分析二进制可执行文件

通过在终端执行:find /Applications/Xcode.app -name symbolicatecrash -type f

我们真机设备,使用/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash的文件。

5、xxx.dSYM、xxx.crash和symbolicatecrash统一存放

首先在桌面建一个demo的文件夹用于存放crash相关的文档,然后将导出的xxx.crash文件、应用的xxx.dSYM和symbolicatecrash保存到电脑桌面的demo文件夹中。

6、进入demo文件夹执行symbolicatecrash分析命令

打开终端进入demo文件夹根目录,执行 ./symbolicatecrash xxx.crash xxx.dSYM 命令。此时终端会显示解析后的堆栈。

如果提示 Error: DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69。

需要先在打开的终端中先执行命令: export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

以上就是解析后,定位到的具体堆栈信息。

非本人手机崩溃分析

针对第二种场景,应该是遇到的概率比较多,经常是其他用户或测试真机遇到了奔溃,这时往往需要他们提供给我们用真机导出来的ips文件。

1、用户真机导出ips文件

引导用户通过真机路径的设置->隐私->分析->分析数据,找到对应崩溃应用的日志并导出发送给我们。

2、将ips文件和xxx.dSYM文件存放统一存放

3、 找到CrashSymbolicator.py文件

在Xcode13中MAC电脑可分析ips文件是采用CrashSymbolicator.py文件进行分析,因此我们需要找到CrashSymbolicator.py程序的存储路径,通过find命令查找到路径是/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py

4、执行分析命令CrashSymbolicator命令

因为CrashSymbolicator.py有其他模块的路径依赖,因此防止依赖报错,我们不将CrashSymbolicator.py复制到我们的demo文件夹中,而是直接执行用python3 执行CrashSymbolicator.py文件,具体命令如下。

python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py -d xxx.dSYM -p xxx.ips

5、查看崩溃堆栈结果

最后,我们就可以在终端看到,崩溃的具体堆栈啦。

 因为CrashSymbolicator.py分析输出JSON格式信息,我们看到的堆栈信息也是JSON格式的。

iOS Xcode13基于dSYM和ips文件Crash奔溃堆栈解析相关推荐

  1. iOS应用中crash 奔溃解析

    find /Applications/Xcode.app -name symbolicatecrash -type f 首先,在桌面建一个文件夹crash,接着需要准备4个文件: 1. 崩溃日志.cr ...

  2. 程序Crash(奔溃)记录和分析工具——Crashlytics

    摘自:http://www.infoq.com/cn/articles/crashlytics-crash-statistics-tools 简介 Crashlytic 成立于2011年,是专门为移动 ...

  3. iOS之解析ips文件

    iOS之解析ips文件 导出ips文件 dSYM配合 symbolicatecrash配合 执行解析 导出ips文件 途径一: 手机连接Xcode查看和导出 Xcode -> Window -& ...

  4. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  5. iOS 客户端基于 WebP 图片格式的流量优化(下)

    在iOS 客户端基于 WebP 图片格式的流量优化(上)这篇文章中,已经介绍了WebP格式图片的下载使用,仅仅只有这样还远远不够,还需要对已经下载的图片数据进行缓存. 曾经有句名言『计算机世界有两大难 ...

  6. 单向散列函数概述并基于MD5算法对文件哈希值实时监测

    1.如何验证文件是否被修改过 只生成一个指纹文件,对指纹文件进行验证 当已经存储的文件被修改之后,指纹文件就会跟着变化,即生成一个单向散列函数 任意长度的数据都对应固定长度的散列值–减少匹配开销 散列 ...

  7. iOS开发crash信息符号表解析

      在实际的开发过程中,我们的app如果出现crash情况,一般会通过bugly或者firebase等工具,上报到控制台,方便我们进行分析.但是有的时候也会存在一些crash信息没有上报,我们开发无法 ...

  8. iOS学习之iOS沙盒(sandbox)机制和文件操作(二)

    接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的Home目录 [cpp] view plaincopy N ...

  9. 基于LZ77算法的文件解压缩项目缺陷分析

    基于Huffman算法和LZ77算法的文件压缩(七) 基于Huffman算法和LZ77算法的文件压缩(六)已经讲解完文件压缩的过程,本文讲解文件解压缩的过程和大文件处理方式 一.解压缩的流程 LZ77 ...

最新文章

  1. 如何使错误日志更加方便排查问题
  2. POJ2669不错的最大流 竞赛问题(枚举King的个数)
  3. win10 linux重置密码忘记了,忘记密码时如何重新设置Windows10密码
  4. c语言二叉树的生成,C语言实现二叉树的创建以及遍历(递归)
  5. mysql数据库优化看的书_MySQL 数据库优化,看这篇就够了
  6. mysql主从同步当天数据,mysql主从数据同步
  7. 微信年终奖人均 280 万?拼多多再追平京东;苹果再三致谢腾讯 | 极客头条
  8. python框架实例,从零构建一个简单的 Python 框架
  9. linux 零拷贝golden,GoldenGate碎碎念
  10. Android SwipeRefreshLayout 刷新控件
  11. 房贷新政或助楼市回暖 北京二手房两天涨10万
  12. Nginx 配置根据表示进行PC与移动的跳转
  13. c++ Arx二次开发创建椭圆和样条曲线
  14. czl蒻蒟的OI之路8
  15. 007高级用法-使用MD来画时序图和流程图
  16. matlab数学建模-神经网络感知器函数
  17. dream on!!
  18. 这十个Python语法,让你的代码更为精炼高效!
  19. title: 010 - Hexo配置SEO优化
  20. WebP已经适合主流使用?美图图像选型评测及优化历程

热门文章

  1. html5 为什么,为什么我们都该关注HTML5
  2. 微信公众号开发之接收与发送消息
  3. 如何遍历一棵二叉树?
  4. uboot启动参数详解和一些细节
  5. 三菱Q程序,主站Q06UDE+QD75P4定位模块
  6. 用Python端对端数据分析识别机器人“僵尸粉”
  7. 2023 小额现金贷网络贷款系统源码 支持打包成APP
  8. Grafana 介绍和使用
  9. Visio中添加MathType公式
  10. [Cadence Sigrity] PowerDC打开提示No license available