当前位置: 首页 > news >正文

iOS_crash文件的获取及符号化(解析)

文章目录

  • 1. 使用 symbolicatecrash 解析 .ips 文件:
  • 2. 使用 CrashSymbolicator.py 解析 ips 文件
  • 3. 使用 atos 解析 crash 文件
  • 4. Helps
    • 4.1 .ips 文件获取
    • 4.2 .crash 文件获取
    • 4.3 获取 .dSYM 和 .app 文件
    • 4.4 使用 dwarfdump 查询 uuid
  • 5. Tips
  • 6. 总结


1. 使用 symbolicatecrash 解析 .ips 文件:

symbolicatecrashXcode自带的crash日志分析工具

步骤1. 找到symbolicatecrash,打开Terminal执行:

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

稍等一会,就会输出路径,然后将路径复制,右键 Finder -> 前往文件夹 -> 粘贴 -> 回车,就能找到symbolicatecrash,将symbolicatecrash拷贝出来备用

步骤2. 将./symbolicatecrashcrashdSYM文件放在同一文件夹里

步骤3. 执行解析命令

./symbolicatecrash 《crash文件绝对路径》 《拖入xx.app.dSYM里的xx文件》 > log.crash 回车

可能会报错:

错误1:Error: "DEVELOPER_DIR" is not defined at /Users/yourname/Downloads/crash/symbolicatecrash line 69.
解决:执行export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer后重试


错误2:No crash report version in /xxx.crash at ./symbolicatecrash line 1365.
原因:Apple 在 Xcode13.3 已经废弃了symbolicatecrash
解决:如果需要使用,需要将.ips转化为之前的格式。可以使用 AppleCrashScripts 进行转化
步骤:

  1. 下载AppleCrashScripts项目,进入到项目目录下
  2. .ips 文件复制到AppleCrashScripts-master文件夹下:
  3. 执行:
swift convertFromJSON.swift -i xxx.ips -o log.crash

生成的log.crash就是旧格式的文件了,再用 ./symbolicatecrash 进行解析。


2. 使用 CrashSymbolicator.py 解析 ips 文件

步骤1. 找到CrashSymbolicator.py文件,
find /Applications/Xcode.app -name CrashSymbolicator.py -type f
结果:
/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py

步骤2. 使用CrashSymbolicator.py.dSYM.ips文件进行解析

python3 《CrashSymbolicator.p文件路径》 -d xxx.dSYM -p xxx.ips

运行结果会直接显示在terminal里,需要的可以复制出来保存一下。

步骤3. 分析

...
"queue": "com.apple.main-thread",
"frames": [{"imageOffset": 117622764,"imageIndex": 0,"symbol": "__57-[QNBUALiveFeedCategoryChannelViewController viewDidLoad]_block_invoke","sourceFile": "QNBUALiveFeedCategoryChannelViewController.m","sourceLine": 80,"symbolLocation": 32},...]
...

找到了崩溃时主线程正在执行的代码,invoke了一个空的block


3. 使用 atos 解析 crash 文件

命令格式:

atos -arch <Binary Architecture> -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l <load address> <address to symbolicate>

操作:

atos -arch arm64 -o 《拖入xxx.app.dSYM里的xxx文件》 -l 《基地址》《偏移后的地址》

Tips: xxx 为项目名

如1:
atos -arch arm64 -o ~/xxx.app.dSYM/Contents/Resources/DWARF/xxx 0x10b3e47ec 0x1043b8000atos -arch arm64 -o ~/xxx.app.dSYM/Contents/Resources/DWARF/xxx 0x104885ec0 0x1043b8000-[TTAttributedLabel encodeWithCoder:] (in xxx) (TTAttributedLabel.m:1534)
-[QNBUAPosterVerticalPaddingPicViewModel posterBackgroundOperation] (in xxx) (QNBUAPosterVerticalPaddingPicViewModel.m:115)

4. Helps

4.1 .ips 文件获取

  1. 设备 -> 设置 -> 隐私与安全性 -> 分析与改进 -> 分析数据 -> (对应app名+时间点)
  2. TestFlight 的可以在 iTunes Connect 获取到崩溃日志
    iTunes Connect -> Manage Your Applications -> 对应app -> View Detail -> Crash Reports (已符号化)
  3. Xcode -> Window -> Origanizer -> Crash 获取 (需登录开发者账号)
    需要用户共享分享,才能获取到他的崩溃日志
    官方提供的崩溃信息不是实时的,只能查看两天前的崩溃信息,需要试试可以使用第三方工具

4.2 .crash 文件获取

设备连接电脑 XCode -> Windows -> Device and Simulator -> View Device Logs -> (对应app名+时间点) -> 右键 Export Log

4.3 获取 .dSYM 和 .app 文件

.dSYM是十六进制函数地址映射信息的中转文件,调试的symbols会包含在这个文件中,symbols即类名、函数名等。

  1. Archives打包时,应该保存每个正式版的dSYMapp文件,以备定位线上问题使用

Window -> Organizer -> Archives -> 右键(需要的包) -> Show in Finder -> 右键 .xcarchive 显示包内容

Tips:Archives包文件路径为:~/Library/Developer/Xcode/Archives

  1. debug模式获取

修改设置:Xcode -> Targets -> Build Setting
2.1:Debug Infomation Format -> DWARF -> DWARF with dSYM File
2.2:Generate Debug Symbols -> YES
用真机编译就能生成.dSYM.app文件了,在项目工程的Products文件夹里,右键 xxx.app 文件 -> Show in Finder -> 就能找到

4.4 使用 dwarfdump 查询 uuid

查询.dSYMuuid,确保跟.ips.crash文件的uuid一致

dwarfdump -u <dSYM所在文件路径>

5. Tips

  • Tips1: Apple deprecated symbolicatecrash at Xcode13.3, use atos instead
  • Tips2: 有些app有很多dSYM文件,需要把所有dSYM文件都拷贝到待解析文件同一文件夹下
  • Tips3: simulator不会生成crash文件
  • Tips4: XCode设置生成dSYM文件,并跑到真机上,此时app产生的.ips文件会自动符号化

6. 总结

  • CrashSymbolicator.py解析结果显示在 Terminal 里,且 没有保持原来的堆栈格式
  • atos效率好低,只能一个地址一个地址的解析
  • symbolicatecrash被废弃了,但文件进过转换还能用,且会解析一整个文件,还保留原来的堆栈格式(推荐使用)

参考:
Diagnosing issues using crash reports and device logs
Acquiring crash reports and diagnostic logs
Understanding Crashes and Crash Logs
iOS Debugging Magic
iOS Crash 分析攻略

本文的描述很难不掺杂作者的主观意见,如果对文章中的内容有疑问,欢迎评论区提出不同的意见进行讨论

相关文章:

iOS_crash文件的获取及符号化(解析)

文章目录 1. 使用 symbolicatecrash 解析 .ips 文件&#xff1a;2. 使用 CrashSymbolicator.py 解析 ips 文件3. 使用 atos 解析 crash 文件4. Helps4.1 .ips 文件获取4.2 .crash 文件获取4.3 获取 .dSYM 和 .app 文件4.4 使用 dwarfdump 查询 uuid 5. Tips6. 总结 1. 使用 sym…...

STM32定时器TIM控制

一、CubeMX的设置 1、新建工程&#xff0c;进行基本配置 2、配置定时器TIM2 1&#xff09;定时器计算公式&#xff1a;&#xff08;以下两条公式相同&#xff09; Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…...

网络请求中,token和cookie有什么区别

HTTP无状态&#xff0c;每次请求都要携带cookie&#xff0c;以帮助识别用户身份&#xff1b; 服务端也可以向客户端set-cookie&#xff0c;cookie大小限制为4kb&#xff1b; cookie默认有跨域限制&#xff0c;不跨域共享和传递&#xff0c;例如&#xff1a; 现代浏览器开始禁…...

Javaweb_xml

文章目录 1.xml是什么&#xff1f;2.xml的用途 1.xml是什么&#xff1f; xml 是可扩展的标记性语言 2.xml的用途 1、用来保存数据&#xff0c;而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式&#xff08;现在 JSON 为主…...

http相关知识点

文章目录 长链接http周边会话保持方案1方案2 基本工具postmanFiddlerFiddler的原理 长链接 一张网页实际上可能会有多种元素组成&#xff0c;这也就说明了网页需要多次的http请求。可由于http是基于TCP的&#xff0c;而TCP创建链接是有代价的&#xff0c;因此频繁的创建链接会…...

【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析

【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析 一、EventHub.cpp 监听 /dev/input/event0 节点流程二、EventHub.cpp 读取 /dev/input/event0 节点数据流程系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总…...

走出迷宫(多组输入bfs)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小明现在在玩一个游戏&#xff0c;游戏来到了教学关卡&#xff0c;迷宫是一个N*M的矩阵。 小明的起点在地图中用“S”来表示&#xff0c;终点用“E”来表示&#xff0c;障碍物用“#…...

Linux系统编程-终端、进程组、会话

一、终端的概念 在UNIX系统中&#xff0c;用户通过终端登录系统后得到一个Shell进程&#xff0c;这个终端成为Shell进程的控制终端&#xff08;Controlling Terminal&#xff09;&#xff0c;进程中&#xff0c;控制终端是保存在PCB中的信息&#xff0c;而fork会复制PCB中的信息…...

Linux部分文件操作记录

问题描述 多级文件夹下&#xff0c;有多个同名文件&#xff0c;以及其他无关文件&#xff0c;为了减轻体量&#xff0c;遍历目录&#xff0c;只保留对应文件 首先open terminal here find . -type f \( ! -name algo_imu.bin -a ! -name post_gnss_only_error.log -a ! -name…...

Android系统-进程-Binder2-Java层

引言&#xff1a; 对于Android系统&#xff0c;一般是从java层到native层&#xff0c;再到kernel驱动层&#xff0c;形成一个完整的软件架构。Android系统中的Binder IPC通信机制的整体架构&#xff0c;从java层到底层驱动层是怎么样的一个架构和原理的呢&#xff1f; 概念与…...

体渲染原理及WebGL实现【Volume Rendering】

体渲染&#xff08;Volume Rendering&#xff09;是NeRF神经场辐射AI模型的基础&#xff0c;与传统渲染使用三角形来显示 3D 图形不同&#xff0c;体渲染使用其他方法&#xff0c;例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码&#xff…...

VUE3组件

组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的组件…...

【iOS】autoreleasepool

来说一下最近在了解的autoreleasepool吧&#xff0c;我们可能平时书写过许多脑残代码&#xff0c;其有很多的缺陷但是我们可能当时学的比较浅就也不太了解&#xff0c;就像下面这样的&#xff1a; for (int i 0; i < 1000000; i) {NSNumber *num [NSNumber numberWithInt…...

0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流

一、下载Insta360 Pro APP 1、手机进入Insta360官网Insta360 | Action Cameras | 360 Cameras | VR Cameras&#xff0c;页面往下滑动到Insta360 Pro2相机处&#xff0c;点击相机图片进入详情页。详情页继续下滑到到手机APP处&#xff0c;根据自己的手机系统选择对应的客户端进…...

大语言模型之三 InstructGPT训练过程

大语言模型 GPT历史文章中简介的大语言模型的的发展史&#xff0c;并且简要介绍了大语言模型的训练过程&#xff0c;本篇文章详细阐述训练的细节和相关的算法。 2020年后全球互联网大厂、AI创业公司研发了不少AI超大模型&#xff08;百亿甚至千亿参数&#xff09;&#xff0c;…...

ChatGPT在自动化报告和数据分析中的应用如何?

ChatGPT在自动化报告和数据分析领域的应用正日益受到关注&#xff0c;这种强大的语言模型不仅可以加速报告生成的过程&#xff0c;还可以辅助数据分析&#xff0c;从而帮助企业和个人更高效地处理信息和做出决策。以下将详细探讨ChatGPT在自动化报告和数据分析中的应用。 **自…...

面试热题(三数之和)

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 输入&…...

在idea运行python文件

在idea运行python文件 如果在idea运行python文件而没有弹出run的选项&#xff0c;则点击File->Settings…->Plugins&#xff0c;在里面搜索python&#xff0c;如果没有显示则在Maketplace进行搜索&#xff0c; 接着Install&#xff0c;然后restart...

SQL - limit

介绍: limit 是限制的意思, 用于限制返回的查询结果的行数(可以通过limit指定查询多少行数据). MySQL支持limit语法, 用来完成分页. 用法: select 字段1, 字段2, ... from table_name limit offset, length;参数说明: offset: 起始行数, 从0开始计数, 如果省略, 则默认为…...

11. Redis基础知识

文章目录 一、概述二、数据类型STRINGLISTSETHASHZSET 三、数据结构字典跳跃表 四、使用场景计数器缓存查找表消息队列会话缓存分布式锁实现其它 五、Redis 与 Memcached数据类型数据持久化分布式内存管理机制 六、键的过期时间七、数据淘汰策略八、持久化RDB 持久化AOF 持久化…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...