符号化的正确姿势

在这里插入图片描述

GUI方式

将 .ips crash report 文件拖放到 Xcode > Window > Devices and Simulators > View Device Logs中, 然后导出 .crash 符号化文件.

使用条件: crash report 对应的 Archive 包是在本机构建的

symbolicatecrash

symbolicatecrash 是一个 exec (可执行文件), Xcode自带, iOS 15 之前的系统产生的 crash report, 可以直接被整个符号化, 文件路径可以通过 find 来查找1 , 结果是:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

使用方式参考如下示例:

// 若执行路径与文件路径不同, 需要补充完整的URI绝对路径
$ symbolicatecrash xxx.ips xxx.dSYM > symbolicated.crash

常见问题

1. Error: “DEVELOPER_DIR” is not defined at /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash line 69.

DEVELOPER_DIR是执行所依赖的环境变量, 解决办法如下:

```shell
$ export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
```
2. Error: No crash report version in xxx.ips at /Applications/Xcode.app/…/symbolicatecrash line 1365.

iOS 15 及之后的版本产生的 crash report, 格式有变, 已经无法使用 symbolicatecrash 符号化

> **Xcode 13 Release Notes > Instruments > New Features**
> To support the new JSON-format crash logs generated in macOS Monterey and iOS 15, Instruments includes a new CrashSymbolicator.py script. This Python 3 script replaces the symbolicatecrash utility for JSON-format logs and supports inlined frames with its default options. For more information, see: CrashSymbolicator.py --help. CrashSymbolicator.py is located in the Contents/SharedFrameworks/CoreSymbolicationDT.framework/Resources/ subdirectory within Xcode 13. (78891800)
3. UUID2 不匹配
// 查看dSYM文件的UUID
$ dwarfdump --uuid <dSYM path>

atos命令

The atos command converts numeric (数字的) addresses to their symbolic (符号的) equivalents (复数, 等同物, 对应物). If full debug symbol information is available, for example in a .app.dSYM sitting beside a .app, then the output of atos will include file name and source line number information.

常用参数 (参数顺序没有要求)

  1. -o <binary-image-file> | <dSYM>

    The path to a binary image file or dSYM in which to look up symbols.

  2. -l <load-address>

    The load address of the binary image. This value is always assumed to be in hex, even without a “0x” prefix. The input addresses are assumed to be in a binary image
    with that load address. Load addresses for binary images can be found in the Binary Images: section at the bottom of crash, sample, leaks, and malloc_history reports.

  3. -arch architecture

    The particular architecure of a binary image file in which to look up symbols.

使用方式

// atos -arch 指令集 -0 dsym -l 调用地址 符号模块地址
// load adress:可执行指令部分相对镜像文件中的起始加载地址 address to symbolicate:调用函数的地址
atos -arch <Binary Architecture> -o <Path to dSYM file>/Contents/Resources/DWARF/<binary image name> -l <load address> <address to symbolicate>

示例

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libswiftCore.dylib              0x00000001cb264b00 specialized _fatalErrorMessage+ 2112256 (_:_:file:line:flags:) + 296
1   libswiftCore.dylib              0x00000001cb264b00 specialized _fatalErrorMessage+ 2112256 (_:_:file:line:flags:) + 296
2   libswiftCore.dylib              0x00000001cb070524 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 62756 (_:wasNativeTypeChecked:) + 232
3   libswiftCore.dylib              0x00000001cb073510 Array.subscript.getter + 84
4   appName                             0x00000001005feba0 0x1004f0000 + 1108896
5   appName                             0x00000001005fcc88 0x1004f0000 + 1100936
6   appName                             0x00000001005fce84 0x1004f0000 + 1101444
7   UIKitCore                       0x00000001c9f180f0 -[UIApplication 

借助xcrun实现交互式

// 执行如下命令
$ xcrun atos -o appName.dSYM/Contents/Resources/DWARF/appName -l 0x1004f0000 -arch arm64
// 然后在换行处输入
0x00000001005feba0
// 终端输出
AppDelegate.updateRootViewController() (in ) (AppDelegate.swift:104)

直接使用 atos

// 解析整个
atos -o xxx.app.dSYM/Contents/Resources/DWARF/xxx -l 0x00000001c4fe7000 -arch arm64
// 解析单行
atos -arch arm64 -o xxx.app.dSYM/Contents/Resources/DWARF/xxx -l 0x00000001c4fe7000 0x00000001a2d6e29c

CrashSymbolicator.py

  • 脚本所在位置:

/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py

  • 怎样使用
// -d: dSYM符号表文件, -o: 输出符号化的文件, -p: iOS系统生成的crashReport
$ python3 CrashSymbolicator.py -d <dSYM> -o <symbolicated.crash> -p <xxx.ips>

思考

  1. 怎么查看 crash report 的 UUID ?

  1. 怎样使用find快速查找文件路径 ; ↩︎

  2. 什么是UUID ? ; ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20366.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】受限玻尔兹曼机 (RBM) 初学者指南

一、说明 受限玻尔兹曼机&#xff08;Restricted Boltzmann Machine&#xff0c;RBM&#xff09;是一种基于能量模型的人工神经网络。它只有一个隐层&#xff0c;将输入层和隐层中的每个神经元互相连接&#xff0c;但不同层的神经元之间没有连接。RBM是一种无向的概率图模型&am…

【RocketMQ】005-Docker 部署 RocketMQ

【RocketMQ】005-Docker 部署 RocketMQ 文章目录 【RocketMQ】005-Docker 部署 RocketMQ一、部署1、拉取镜像MQ 镜像可视化平台镜像 2、创建挂载目录创建 nameserver 挂载目录创建 broker 目录创建 broker 配置文件目录 3、编辑配置文件4、启动服务启动 nameserver启动 broker启…

论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding

论文笔记--TinyBERT: Distilling BERT for Natural Language Understanding 1. 文章简介2. 文章概括3 文章重点技术3.1 Transformer Distillation3.2 两阶段蒸馏 4. 数值实验5. 文章亮点5. 原文传送门6. References 1. 文章简介 标题&#xff1a;TinyBERT: Distilling BERT fo…

GPON MAC SFP ONU模块介绍与应用

伴随着网络通讯技术的发展&#xff0c;pon无源光网络正逐步走进人们的视野&#xff1b;在这之前你是否仅知道以太网接入&#xff1f;相比与以太网接入&#xff0c;pon作为一种点到多点网络&#xff0c;具有运维成本低、服务范围广、资源占用少等优势&#xff1b;我们最为熟知的…

FlinkCDC第四部分-同步mysql到mysql,ctrl就完事~(flink版本1.17.1)

本文介绍了不同源单表-单表同步&#xff0c;不同源多表-单表同步。 注&#xff1a;此版本支持火焰图 Flink版本&#xff1a;1.17.1 环境&#xff1a;Linux CentOS 7.0、jdk1.8 基础文件&#xff1a; flink-1.17.1-bin-scala_2.12.tgz、 flink-connector-jdbc-3.0.0-1.16.…

centos7根分区、文件系统扩容

1、 输入lsblk&#xff0c;查看到新硬盘sde&#xff0c;根目录现71G. 2、 创建分区fidisk /dev/sde 3、 刷新分区 partprobe /dev/sde&#xff0c;并创建物理卷 pvcreate /dev/sde1 4、 查看卷组名 vgdisplay 5、 将物理卷扩展到卷组 vgextend centos /dev/sde1 6、 查看逻辑巻…

拉丁语翻译器有哪些?一分钟快速分享

拉丁语翻译器有哪些&#xff1f;拉丁语是一种古老的语言&#xff0c;现在已经不再作为主要的交流工具使用。然而&#xff0c;在某些学术领域和文化传承中&#xff0c;拉丁语仍然具有重要地位。因此&#xff0c;当我们需要翻译拉丁语时&#xff0c;使用翻译器可以提高效率和准确…

立式oled拼接屏有哪些产品优点?

葫芦岛oled拼接屏是一种高清晰度的显示屏&#xff0c;由多个oled屏幕拼接而成。它可以用于广告牌、展览、演示、会议等场合&#xff0c;具有高亮度、高对比度、高色彩饱和度、高刷新率等优点&#xff0c;能够吸引人们的眼球&#xff0c;提高信息传递效果。 葫芦岛oled拼接屏的优…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

ens33没有inet地址

1&#xff09;切换到根用户 su - root 按提示输入密码&#xff08;不切换到根用户没有权限修改文件&#xff09; &#xff08;2&#xff09;输入cd /etc/sysconfig/network-scripts/ &#xff08;3&#xff09;输入vi ifcfg-ens33 ifcfg-ens33 &#xff08;4&#xff09;光标移…

SQL力扣练习(六)

目录 1. 部门工资前三高的所有员工(185) 题解一(dense_rank()窗口函数&#xff09; 题解二&#xff08;自定义函数&#xff09; 2.删除重复的电子邮箱(196) 题解一 题解二&#xff08;官方解析&#xff09; 3.上升的温度(197) 解法一&#xff08;DATEDIFF()&#xff09;…

阿里云AliYun物联网平台使用-设备添加以及模拟设备端上云

一、前言 上一篇文章提到&#xff0c;我们已经申请了免费的阿里云平台&#xff0c;下面需要将我们的设备在阿里云上进行注册和申请&#xff0c;以便于我们的数据上云。 二、步骤 注册产品&#xff08;设备模型&#xff09; 在产品页面&#xff0c;点击 "创建产品" 。…