iOS_Crash报告的组成结构

news2024/11/18 23:51:15

崩溃报告结构如下,每个部分都包含可帮助定位崩溃位置的信息:
examining-the-fields-in-a-crash-report


1. Header

描述崩溃发生的环境,包含设备、系统、时间、版本等信息。如:

Incident Identifier: 6156848E-344E-4D9E-84E0-87AFD0D0AE7B
CrashReporter Key:   76f2fb60060d6a7f814973377cbdc866fffd521f
Hardware Model:      iPhone8,1
Process:             TouchCanvas [1052]
Path:                /private/var/containers/Bundle/Application/51346174-37EF-4F60-B72D-8DE5F01035F5/TouchCanvas.app/TouchCanvas
Identifier:          com.example.apple-samplecode.TouchCanvas
Version:             1 (3.0)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.example.apple-samplecode.TouchCanvas [1806]


Date/Time:           2020-03-27 18:06:51.4969 -0700
Launch Time:         2020-03-27 18:06:31.7593 -0700
OS Version:          iPhone OS 13.3.1 (17D50)

2. Exception information

异常信息。描述进程如何终止,但可能无法完全解释程序终止的原因。如:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000102afb3d0
  • Exception Type:Mach 异常名称 (对应的 BSD 终止信号)
  • Exception Codes:异常处理器特定信息,一个或多个 64 位十六进制数。通常此字段不存在,因为操作系统通过其他字段将信息呈现为人类可读的信息。
  • Exception Subtype:异常子类型
  • Exception Message:异常描述信息
  • Exception Note:异常附加信息。
    1. 若包含 EXC_CORPSE_NOTIFY,则崩溃并非源自硬件缺陷,原因可能是 操作系统 或 进程调用 abort() 函数 导致进程终止。
    2. 若包含 SIMULATED,则进程没有崩溃,但操作系统可能随后请求终止进程。
    3. 若包含 NON-FATAL CONDITION(这不是崩溃),则进程不会终止,因为创建崩溃报告的问题并不致命
  • Termination Reason:终止原因,系统组件在遇到致命错误时会终止进程,并在该字段中记录信息。可在此字段中找到例如:无效代码签名、缺少依赖库、访问不带目的的字符串的隐私敏感信息 等消息。
  • Triggered by Thread or Crashed Thread:引发异常的线程

3. Diagnostic messages

操作系统有时会包含额外的诊断信息,这些信息使用多种格式,具体取决于崩溃的原因,并不是每个崩溃报告都包含。如:

Application Specific Information:
BUG IN CLIENT OF LIBDISPATCH: dispatch_sync called on queue already owned by current thread

Application Specific Information:进程终止前发生的框架错误消息
Termination Description:由于看门狗违规而导致终止,会包含该字段,描述看门狗触发原因的信息。如:

Termination Description: SPRINGBOARD, 
    scene-create watchdog transgression: application<com.example.MyCoolApp>:667
    exhausted real (wall clock) time allowance of 19.97 seconds 

4. Backtraces

崩溃进程的每个线程都被捕获为回溯,记录进程终止时线程上运行的代码。
由语言异常引起的崩溃包含一个额外的回溯,即位于第一个线程之前的 Last Exception Backtrace

每个回溯的第一行列出了线程的编号和名称。之后的每一行代表回溯中的一个堆栈帧,堆栈帧的每一列都包含崩溃时执行的代码信息。如:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   TouchCanvas                       0x0000000102afb3d0 CanvasView.updateEstimatedPropertiesForTouches(_:) + 62416 (CanvasView.swift:231)
1   TouchCanvas                       0x0000000102afb3d0 CanvasView.updateEstimatedPropertiesForTouches(_:) + 62416 (CanvasView.swift:231)
2   TouchCanvas                       0x0000000102af7d10 ViewController.touchesMoved(_:with:) + 48400 (<compiler-generated>:0)
3   TouchCanvas                       0x0000000102af80b8 @objc ViewController.touchesMoved(_:with:) + 49336 (<compiler-generated>:0)
4   UIKitCore                         0x00000001ba9d8da4 forwardTouchMethod + 328
5   UIKitCore                         0x00000001ba9d8e40 -[UIResponder touchesMoved:withEvent:] + 60
6   UIKitCore                         0x00000001ba9d8da4 forwardTouchMethod + 328
7   UIKitCore                         0x00000001ba9d8e40 -[UIResponder touchesMoved:withEvent:] + 60
8   UIKitCore                         0x00000001ba9e6ea4 -[UIWindow _sendTouchesForEvent:] + 1896
9   UIKitCore                         0x00000001ba9e8390 -[UIWindow sendEvent:] + 3352
10  UIKitCore                         0x00000001ba9c4a9c -[UIApplication sendEvent:] + 344
11  UIKitCore                         0x00000001baa3cc20 __dispatchPreprocessedEventFromEventQueue + 5880
12  UIKitCore                         0x00000001baa3f17c __handleEventQueueInternal + 4924
13  UIKitCore                         0x00000001baa37ff0 __handleHIDEventFetcherDrain + 108
14  CoreFoundation                    0x00000001b68a4a00 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
15  CoreFoundation                    0x00000001b68a4958 __CFRunLoopDoSource0 + 80
16  CoreFoundation                    0x00000001b68a40f0 __CFRunLoopDoSources0 + 180
17  CoreFoundation                    0x00000001b689f23c __CFRunLoopRun + 1080
18  CoreFoundation                    0x00000001b689eadc CFRunLoopRunSpecific + 464
19  GraphicsServices                  0x00000001c083f328 GSEventRunModal + 104
20  UIKitCore                         0x00000001ba9ac63c UIApplicationMain + 1936
21  TouchCanvas                       0x0000000102af16dc main + 22236 (AppDelegate.swift:12)
22  libdyld.dylib                     0x00000001b6728360 start + 4


Thread 1:
0   libsystem_pthread.dylib           0x00000001b6645758 start_wqthread + 0


Thread 2:
0   libsystem_pthread.dylib           0x00000001b6645758 start_wqthread + 0
...
  • 第一列:堆栈帧号,堆栈帧按调用顺序排列,其中0帧是执行停止时正在执行的函数,1帧则是调用0帧的函数,以此类推。

  • 第二列:正在执行函数的二进制文件名称

  • 第三列:正在执行的机器指令的地址。对于非崩堆栈,这是控制权返回到该堆栈帧后执行的第一条机器指令的地址

  • 第四列:在完全符号化的崩溃报告中,正在执行的函数名称。

  • 后面的 +数字:是从函数入口点到函数中当前指令的字节偏移量。

  • (文件名.后缀:数字):文件名和行号。某些情况下跟原始源代码不对应:

    1. 如果源文件名是 <compiler-generated>,则编译器为该框架创建代码,并且该代码不在您的源文件中。如果这是崩溃线程的顶部帧,需要查看前面几个堆栈帧获得线索。
    2. 如果源文件的行号是0,意味着回溯不会映射到原始代码中的特定代码行。因为编译器优化了代码(如:内敛),且崩溃时执行的代码与原始代码中的确切行不对应。此时框架的函数名仍然只是个线索。

5. Thread state

线程状态部分列出了程序终止时崩溃线程的 CPU 寄存器及其值。如:

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000001   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x000000000000000f
    x4: 0x00000000000001c2   x5: 0x000000010327f6c0   x6: 0x000000010327f724   x7: 0x0000000000000120
    x8: 0x0000000000000001   x9: 0x0000000000000001  x10: 0x0000000000000001  x11: 0x0000000000000000
   x12: 0x00000001038612b0  x13: 0x000005a102b075a7  x14: 0x0000000000000100  x15: 0x0000010000000000
   x16: 0x00000001c3e6c630  x17: 0x00000001bae4bbf8  x18: 0x0000000000000000  x19: 0x0000000282c14280
   x20: 0x00000001fe64a3e0  x21: 0x4000000281f1df10  x22: 0x0000000000000001  x23: 0x0000000000000000
   x24: 0x0000000000000000  x25: 0x0000000282c14280  x26: 0x0000000103203140  x27: 0x00000001bacf4b7c
   x28: 0x00000001fe5ded08   fp: 0x000000016d311310   lr: 0x0000000102afb3d0
    sp: 0x000000016d311200   pc: 0x0000000102afb3d0 cpsr: 0x60000000
   esr: 0xf2000001  Address size fault

了解线程状态是个高级主题,需要了解程序二进制接口(ABI),可参阅 Writing ARM64 code for Apple platforms
寄存器为内存访问引起的崩溃提供额外信息,详情可参阅 Understand the crashed thread’s registers


6. Binary images

二进制图像,崩溃报告的二进制图片部分列出了终止时进程中加载的所有代码(如:应用程序可执行文件和系统框架)。二进制图像部分中的每一行代表一个二进制图像, 如:

Binary Images:
0x102aec000 - 0x102b03fff TouchCanvas arm64  <fe7745ae12db30fa886c8baa1980437a> /var/containers/Bundle/Application/51346174-37EF-4F60-B72D-8DE5F01035F5/TouchCanvas.app/TouchCanvas
...
  • 第一列:进程内二进制图像的地址范围,第一个地址是二进制文件的加载地址。
  • 第二列:二进制名称
  • 第三列:操作系统加载到进程中的二进制映像的 CPU 架构
  • 第四列:唯一标识二进制图像的 UUID,跟 dSYM 文件对应
  • 第四列:磁盘上二进制文件的路径。(MacOS使用占位符替换用户可识别的路径组件以保护隐私)

参考:
Examining the fields in a crash report

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++STL基础入门】深入浅出string类insert和appand

文章目录 前言一、插入1.中间插入2.尾巴插入拼接appand 总结 前言 本系列STL是使用vs2022C20版本特性来写的。 在C标准模板库&#xff08;STL&#xff09;的众多容器中&#xff0c;string类是处理字符串的重要工具。它提供了丰富的函数和操作符&#xff0c;使得字符串的操作…

真机二阶段之堆叠技术

堆叠技术 --- 可以将多台真实的物理设备逻辑上抽象成一台 思科 -- VPC 华为 -- iStack和CSS 华三 -- IRF 锐捷 -- VSU iStack和CSS的区别&#xff1a; CSS --- 集群 --- 它仅支持将两台支持集群的交换机逻辑上整合成一台设备。 iStack --- 堆叠 --- 可以将多台支持堆叠的交换…

Agile Iteration Velocity

【agile iteration velocity】敏捷速度指的平均速度 第四次迭代结束速度&#xff1a; 76 / 4 19 第五次迭代结束速度&#xff1a; &#xff08;76 24 &#xff09; / 5 100 / 5 20

【地理专题】2023年最新全国A级景区数

数据来源&#xff1a;中国文化和旅游部时间跨度&#xff1a;2023年区域范围&#xff1a;全国范围数据字段&#xff1a; 景区名称&#xff1b;地址&#xff1b;等级&#xff1b;城市&#xff1b;经度&#xff1b;纬度 该图基于自然资源部地图技术审查中心标准地图服务网站下载…

The internal rate of return (IRR)

内部收益率 NPV(Net Present Value)_spencer_tseng的博客-CSDN博客

华为网络篇 OSPF的Silent-Interface-33

难度1复杂度1 目录 一、实验拓扑 二、实验步骤 三、实验过程 总结 一、实验拓扑 二、实验步骤 1.搭建如图所示的网络拓扑&#xff1b; 2.初始化各设备&#xff0c;配置相应的IP地址&#xff0c;测试直连网络的连通性&#xff1b; 3.整个网络配置OSPF协议&#xff0c;查看…

使用预制体画刷在游戏场景中快速布置预制体、粒子特效等

有时候在使用tilemap的时候&#xff0c;会希望在场景中添加更复杂的对象。 在2d-extras中&#xff0c;加入了预制件笔刷&#xff08;Prefab Brush&#xff09;&#xff0c;可以将游戏物体预制体作为瓦片&#xff0c;来方便的在游戏场景中快速的绘制。可以自动适应游戏物体的位置…

Docker容器:docker镜像的创建及dockerfile

Docker容器&#xff1a;docker镜像的创建及dockerfile案例 一.docker镜像的三种创建方法 创建镜像有三种方法&#xff1a;基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.基于现有镜像创建 1.1 启动镜像 #首先启动一个镜像&#xff0c;在容器里做修改 docker …

Linux笔试题(1)

1、以长格式列目录时&#xff0c;若文件test的权限描述为&#xff1a;drwxrw-r–&#xff0c;则文件test的类型及文件主的权限是__A____。 A.目录文件、读写执行 B.目录文件、读写 C.普通文件、读写 D.普通文件、读 在这个问题中&#xff0c;我们需要解析文件权限的描述&…

Java面向对象三大特性之多态及综合练习

1.1 多态的形式 多态是继封装、继承之后&#xff0c;面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式&#xff1a; 父类类型 变量名 new 子类/实现类构造器; 变量名.方法名(); 多态的前提&#xff1a;有继承关系&#xff0c;子类对象是可以赋…

Android11 中 LED 使用-RK3568

文章目录 前言原理图设备树驱动前言 现在我们来学习点亮LED 原理图 然后对应在核心板原理图上查找 Working_LEDEN_H_GPIO0_B7,如下图所示: 那么我们只要控制 GPIO0_B7 即可控制 led 的亮灭。 设备树 leds: leds {compatible = "gpio-leds";work_led: work {gpi…

AgentBench——AI智能体基准测试官方

ModaGPT 简介 排行榜 提交模型 提问 AgentBench是第一个系统性的基准测试,用于评估LLM作为智能体在各种真实世界挑战和8个不同环境中的表现。 Models

shell脚本——文件三剑客之grep

一.grep选项 -A<显示行数>&#xff1a;除了显示符合样式的那一列之外&#xff0c;并显示该行之后的内容&#xff0c;下几行内容&#xff0c;本行也会显示 -B<显示行数>&#xff1a;除了显示符合样式的那一行之外&#xff0c;并显示该行之前的内容&#xff0c;上几行…

回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介…

【脚踢数据结构】常见树总结(图码结和版)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.5->2.3

目录 之前的文章&#xff1a; 1.5 Blend Attributes by Value 发射器更新 粒子生成 粒子更新 2.1 Static Beams ​编辑 发射器更新&#xff1a; 粒子生成 粒子更新 2.2 Dynamic Beams 没有开始模拟前的效果是&#xff1a; 开始模拟后的效果是&#xff1a; 发射器更新 …

shell脚本之数组

shell数组 数组和变量 变量&#xff1a;存储单个元素的内存空间 数组&#xff1a;存储多个元素的连续的内存空间&#xff0c;相当于多个变量的集合 数组和索引 索引的编号从0开始&#xff0c;属于数值索引 索引可支持使用自定义的格式&#xff0c;而不仅是数值格式&#xf…

FPGA原理与结构——RAM IP核的使用与测试

目录 一、前言 二、RAM IP核定制 1、RAM IP核 step1 打开vivado工程&#xff0c;点击左侧栏中的IP Catalog step2 在搜索栏搜索RAM&#xff0c;找到Block Memory Generator IP核&#xff1a; 2、IP核定制 step3 Baisc界面定制 step4 端口定制 step5 Other Options st…

Shell脚本 六 :免交互

文章目录 1.免交互的概念1.1什么是免交互 2.多行重定向2.1标准格式2.2注意事项2.3示例 3. expect免交互 &#xff08;需要安装&#xff09;3.1定义3.2 安装3.3命令格式3.4 执行expect脚本3.5 expect相关命令3.5.1 脚本解释器3.5.2 spaw3.5.3 expect3.5.4 send3.5.5 结束符3.5.6…

Vue3 用父子组件通信实现页面页签功能

一、大概流程 二、用到的Vue3知识 1、组件通信 &#xff08;1&#xff09;父给子 在vue3中父组件给子组件传值用到绑定和props 因为页签的数组要放在父页面中&#xff0c; data(){return {tabs: []}}, 所以顶部栏需要向父页面获取页签数组 先在页签页面中定义props用来接…