iOS开发 通过分析UMeng的错误详情解决crash问题

iOS开发 通过分析UMeng的错误详情解决crash问题

在项目中获取崩溃信息很重要。在iOS开发调试以及上线之后,程序经常会出现Crash问题。比较常见的第三方crash分析工具是使用友盟、百度、crashlytics等。第三方crash分析工具,甚至还带了符号化crash日志的功能。比较常用的有Crashlytics,Flurry等。

##找出出现crash的代码所在的位置

友盟统计中Crash有时候很难看出出现crash的地方。所以我们需要找出出现crash的代码所在的位置。
例如-[NSNull length]: unrecognized selector sent to instance 0x3a675a60

-[NSNull length]: unrecognized selector sent to instance 0x3a675a60
(null)
(0   CoreFoundation                      0x2f70fee3 <redacted> + 1541   libobjc.A.dylib                     0x39eaace7 objc_exception_throw + 382   CoreFoundation                      0x2f7137f7 <redacted> + 2023   CoreFoundation                      0x2f7120f7 <redacted> + 7064   CoreFoundation                      0x2f661058 _CF_forwarding_prep_0 + 245   Views                               0x3f55e3 Views + 41343716   Views                               0xce63f Views + 8289917   UIKit                               0x31f766a7 <redacted> + 908   UIKit                               0x320dd56d <redacted> + 1209   UIKit                               0x31f766a7 <redacted> + 9010  UIKit                               0x31f76643 <redacted> + 3811  UIKit                               0x31f76613 <redacted> + 4612  UIKit                               0x31f61d5b <redacted> + 37413  UIKit                               0x31f7605b <redacted> + 59414  UIKit                               0x31f75d2d <redacted> + 52815  UIKit                               0x31f70c87 <redacted> + 75816  UIKit                               0x31f45e55 <redacted> + 19617  UIKit                               0x31f44521 <redacted> + 712018  CoreFoundation                      0x2f6dafaf <redacted> + 1419  CoreFoundation                      0x2f6da477 <redacted> + 20620  CoreFoundation                      0x2f6d8c67 <redacted> + 63021  CoreFoundation                      0x2f643729 CFRunLoopRunSpecific + 52422  CoreFoundation                      0x2f64350b CFRunLoopRunInMode + 10623  GraphicsServices                    0x345b26d3 GSEventRunModal + 13824  UIKit                               0x31fa4871 UIApplicationMain + 113625  Views                               0x277f77 Views + 257215126  libdyld.dylib                       0x3a3a8ab7 <redacted> + 2
)dSYM UUID: DF56542E-9A22-323A-AB92-66DDB8217241
CPU Type: armv7
Slide Address: 0x00004000
Binary Image: Views
Base Address: 0x000f5000

在以上的出现crash的log中,我们可以看到无法直接定位crash的代码行。

##下面我们就通过命令找出问题所在

  • 1、找到当时打包应用发布时的归档文件 *.xcarchive。找到 dSYMs 文件夹里面的 *.dSYM 文件,将其复制出来。
  • 2、打开终端,通过cd,*.dSYM 文件所在的文件夹。
  • 3、通过命令dwarfdump --uuid appname.app.dSYM 找出对应的响应的uuid
1deMac-mini-2:dysm a1$ dwarfdump --uuid 4.0.3_Views.app.dSYM
UUID: DF56542E-9A22-323A-AB92-66DDB8217241 (armv7) 4.0.3_Views.app.dSYM/Contents/Resources/DWARF/Views
UUID: 1D53917F-B39C-3FBB-BDD4-3802F7372CD1 (arm64) 4.0.3_Views.app.dSYM/Contents/Resources/DWARF/Views
  • 4、找出among中crash的错误详情中的dSYM UUID: DF56542E-9A22-323A-AB92-66DDB8217241 如下图所示

在这里插入图片描述

  • 5、比对uuid是否一致,如果一致即说明包和crash时匹配的。
  • 6、通过命令dwarfdump --arch=armv7 --lookup 0x3f55e3 4.0.3_Views.app.dSYM 可以看出问题所在
1deMac-mini-2:dysm a1$ dwarfdump --arch=armv7 --lookup 0x3f55e3 4.0.3_Views.app.dSYM
----------------------------------------------------------------------File: 4.0.3_Views.app.dSYM/Contents/Resources/DWARF/Views (armv7)
----------------------------------------------------------------------
Looking up address: 0x00000000003f55e3 in .debug_info... found!0x0038a04b: Compile Unit: length = 0x0000065e  version = 0x0002  abbr_offset = 0x00000000  addr_size = 0x04  (next CU at 0x0038a6ad)0x0038a056: TAG_compile_unit [106] *AT_producer( "Apple LLVM version 8.0.0 (clang-800.0.38)" )AT_language( DW_LANG_ObjC )AT_name( "/Users/a1/Desktop/ios/ios/Views/Views/Controllers/Browser/BrowserViewController+Ex.m" )AT_stmt_list( 0x001f699f )AT_comp_dir( "/Users/a1/Desktop/ios/ios/Views" )AT_APPLE_optimized( 0x01 )AT_APPLE_major_runtime_vers( 0x02 )AT_low_pc( 0x003f52b0 )AT_high_pc( 0x003f5850 )0x0038a40d:     TAG_subprogram [117] *AT_low_pc( 0x003f53e2 )AT_high_pc( 0x003f581c )AT_frame_base( r7 )AT_object_pointer( {0x0038a429} )AT_name( "-[BrowserViewController(Ex) getShareModel:]" )AT_decl_file( "/Users/a1/Desktop/ios/ios/Views/Views/Controllers/Browser/BrowserViewController+Ex.m" )AT_decl_line( 17 )AT_prototyped( 0x01 )AT_type( {0x0038a53f} ( ShareModel* ) )AT_APPLE_optimized( 0x01 )AT_APPLE_isa( 0x01 )
Line table dir : '/Users/a1/Desktop/ios/ios/Views/Views/Controllers/Browser'
Line table file: 'BrowserViewController+Ex.m' line 29, column 55 with start address 0x00000000003f55d0Looking up address: 0x00000000003f55e3 in .debug_frame... found!0x00067490: FDElength: 0x0000000cCIE_pointer: 0x00000000start_addr: 0x003f53e2 -[BrowserViewController(Ex) getShareModel:]range_size: 0x0000043a (end_addr = 0x003f581c)Instructions: 0x003f53e2: CFA=sp     1deMac-mini-2:dysm a1$ 

从上面的log中,我们可以看到问题所在,crash出现在BrowserViewController+Ex.m的29行。以及可以从start_addr: 0x003f53e2 -[BrowserViewController(Ex) getShareModel:]看出crash问题所在的方法。

如下图所示:

在这里插入图片描述

本文为学习记录,如果有不对的地方,还请您留言。

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

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

相关文章

设计模式 - 七大软件设计原则

目录 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 1.2.2、单一职责原则 1.2.3、里氏替换原则 1.2.4、迪米特原则 1.2.5、接口隔离原则 1.2.6、依赖倒转原则 1.2.7、合成/聚合复用原则 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 开闭原则&#xff1a;对扩…

Docker 日志管理 - ELK

Author&#xff1a;rab 目录 前言一、Docker 日志驱动二、ELK 套件部署三、Docker 容器日志采集3.1 部署 Filebeat3.2 配置 Filebeat3.3 验证采集数据3.4 Kibana 数据展示3.4.1 创建索引模式3.4.2 Kibana 查看日志 总结 前言 如何查看/管理 Docker 运行容器的日志&#xff1f;…

1.Linux入门基本指令

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 01.ls指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令(重要) 06.rmdir&&rm指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令(重要) 10.cat指令 nano指令 echo指令 输出重定向 追加重…

当 FineReport 遇见 CnosDB

随着大数据和物联网应用的快速发展&#xff0c;时序数据库成为了一种关键的数据存储和分析工具。而 FineReport 作为一款流行的商业智能工具&#xff0c;与时序数据库 CnosDB 的集成可以为企业提供更强大的数据分析和可视化功能。本博客将介绍如何将 FineReport 与 CnosDB 集成…

架构师-软件工程习题选择题

架构师-软件工程习题选择题

SpringBoot-黑马程序员-学习笔记(一)

8.pom文件中的parent 我们使用普通maven项目导入依赖时&#xff0c;通常需要在导入依赖的时候指定版本号&#xff0c;而springboot项目不需要指定版本号&#xff0c;会根据当前springboot的版本来下载对应的最稳定的依赖版本。 点开pom文件会看到这个&#xff1a; 继承了一个…

【Redis】基础数据结构-简单动态字符串SDS

C语言字符串 char *str "redis"; // 可以不显式的添加\0&#xff0c;由编译器添加 char *str "redis\0"; // 也可以添加\0代表字符串结束C语言中使用char*字符数组表示字符串&#xff0c;‘\0’来标记一个字符串的结束&#xff0c;不过在使用的过程中我…

自动驾驶传感器技术

自动驾驶传感器技术是自动驾驶系统的关键组成部分&#xff0c;它使车辆能够感知并理解周围环境。本文将深入探讨自动驾驶传感器技术&#xff0c;包括常见类型、工作原理以及它们在自动驾驶中的作用。 1. 摄像头 摄像头的工作原理 摄像头是基于光学原理的传感器&#xff0c;其…

【数组】二分查找(减不减一,看初始化!)

一、力扣习题链接 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 二、思路 这道题目的前提是数组为有序数组&#xff0c;同时题目还强调数组中无重复元素&#xff0c;因为一旦有重复元素&#xff0c;使用二分查找法返回的元素下标可能不是唯一的&#xff0c;这些都是…

防火墙-——iptables

目录 安全技术&#xff1a;&#xff08;市场上常见的防御&#xff09; 1.入侵检测机制 2.入侵防御 3.防火墙 4.防水墙 通信的五大要素和四要素 iptables 四个表 数据流程图 安装iptables iptables管理选项: 匹配条件 通用匹配规则 1.查看filter中的 INPUT表 2.清…

Docker中MySql容器的数据挂载

1.查看是否有数据卷 docker inspect mysql 说明&#xff1a;Name的值是随机生成的不是命令的。因此没有数据卷。 2. 目录挂载 说明&#xff1a;本地目录不允许简写&#xff1b;在执行docker runi命令时&#xff0c;使用-v本地目录&#xff1a;容器内目录可以完成本地目录挂载…

滴滴发布十一大数据:延边出行需求上涨280% 西部省份成旅游热点

今年十一假期适逢中秋佳节&#xff0c;在亲友团聚和长假出游的多重期盼下&#xff0c;超级黄金周展现强劲内需&#xff0c;带动多样化的消费趋势&#xff0c;出行热情也随之高涨。滴滴出行数据显示&#xff0c;打车需求相比去年同期上涨80%&#xff0c;高峰时段每分钟呼叫突破1…

2019架构真题2020案例(四十七)

数据存储在中央仓库&#xff0c;处理流程独立&#xff0c;交互性好数据和处理耦合在一起&#xff0c;每次修改需要重启劣势&#xff1a;需要通过连接组件进行连接&#xff0c;性能降低优势&#xff1a;支持并发通过仓库连接组件访问&#xff0c;效率高 (8分)缓存中存储当前的热…

深度学习-卷积神经网络-ResNET

文章目录 前言1.resnet2.作者3.精度&#xff08;TOP-5&#xff09;4.论文一览5.竞赛排名6.网络退化7.残差8.残差 1.作者 前言 本文来自B站&#xff1a; ResNet深度残差网络 1.resnet 2.作者 3.精度&#xff08;TOP-5&#xff09; 4.论文一览 5.竞赛排名 6.网络退化 ResNet解…

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择&#xff0c;以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…

Android ncnn-android-yolov8-seg源码解析 : 实现人像分割

1. 前言 上篇文章&#xff0c;我们已经将人像分割的ncnn-android-yolov8-seg项目运行起来了&#xff0c;后续文章我们会抽取出Demo中的核心代码&#xff0c;在自己的项目中&#xff0c;来接入人体识别和人像分割功能。 先来看下效果&#xff0c;整个图像的是相机的原图&#…

Linux CentOS7 vim多窗口编辑

我们在用vim编辑文件时&#xff0c;有各种需求。如有时需要在多个文件之间来回操作&#xff0c;一会关闭一个文件&#xff0c;一会再打开另外一个文件&#xff0c;这样来回操作显得太笨拙。有时&#xff0c;vim编辑多行的大文件&#xff0c;来回查看、编辑前面一部分及最后一部…

NFT合约分析:ERC721A

概述 读者可前往我的博客获得更好的阅读体验。 本文主要介绍标准NFT实现的一个变体&#xff0c;即ERC721A合约实现的相关细节。ERC721A是由著名NFT系列Azuki提出&#xff0c;该系列NFT是著名的蓝筹NFT。本文主要聚焦于Azuki提出的ERC721A合约的代码细节分析。 与传统的ERC72…

C++ 字符串

在本文中&#xff0c;您将学习如何在C中处理字符串。您将学习声明它们&#xff0c;对其进行初始化以及将它们用于各种输入/输出操作。 字符串是字符的集合。C 编程语言中通常使用两种类型的字符串&#xff1a; 作为字符串类对象的字符串&#xff08;标准C 库字符串类&#xff0…

HiveServer2 Service Crashes(hiveServer2 服务崩溃)

Troubleshooting Hive | 5.9.x | Cloudera Documentation 原因&#xff1a;别人用的都好好的&#xff0c;我的集群为什么会崩溃&#xff1f; 1.hive分区表太多(这里没有说具体数量。) 2.并发连接太多&#xff0c;我记的以前默认是200个连接 3.复杂的hive查询访问表的的分区…