项目上线后 如何快速定位到用户崩溃 卡顿的问题!

1.通常我们自己会在程序中加入友盟或者bugly来监听后期线上的运行,bugly记得上传符号表文件定位.

2.另外一种是处理测试提交给我们的一些堆栈bug信息。

先说定位bugly的卡顿崩溃信息。

 1.获取符号表文件

在 XCode中, Window->Organizer->选择提交到App Store的Archies->右键,showin finder ->右键->显示包内容,在dSYMs文件夹里的xxx.app.dSYM就是符号表文件。这里包含着debug信息

使用命令获取dsym文件的uuid,对照crash日志里的uuid,如果一致则进行下一步

2.命令: dwarfdump --uuid (xxx.app.dSYM的路径)

结果如下:UUID: EC087835-FA55-36F2-B4D9-430BF6C2BA69 (armv7) uau1.3.0.app.dSYM/Contents/Resources/DWARF/Name

UUID: 916F22F5-F3B1-3709-BB7E-5B11267B5D1F (arm64) uau1.3.0.app.dSYM/Contents/Resources/DWARF/Name

对照运行环境 找出UUID运行一致的运行环境 是arm64  armv7

3.找到错误部分

如:appName 0x000000010007528c 0x0000000100004000 + 1444580

取前者 0x000000010007528c ,后者为程序基地址,错误日志也会标出App base addr: 0x0000000100004000

一般错误位置都是在项目名后面的堆栈地址,CoreFoundation、UIKit等后面的堆栈地址无法定位

4.定位

在终端中进入.dSYM文件的所在目录下

cd /Users/01/Desktop/xxx.xcarchive/dSYMs

查找定位

命令: atos -arch (运行环境) -o (.dSYM文件包里面表单信息路径) -l (程序基地址) (错误代码地址)

错误代码地址及程序基地址的获取见上文

例:atos -arch arm64 -o appName.app.dSYM/Contents/Resources/DWARF/appName -l 0x0000000100004000 0x000000010007528

即可定位到代码位置. -[YYView init_tableview] (in xxx) (YYView.m:828) 括号里的是代码所在类别和行数

 

第二种就是直接通过堆栈地址定位到崩溃位置的信息

1.从 appName.xcarchive 里提出 appName.dSYM 和 appName文件。放到一个目录下。从打包产生的归档文件里面提出符号表文件,app名字文件

2.使用终端进入这个目录,使用 xcrun atos arm64 -o appName 0x0000000100098000

arm64是架构 ,appName是app文件,0x0000000100098000是基地址
下面详细说明

首先打开Xcode,点击最上方菜单栏的Window选项,选择Organizer,打开打包页面。
在打包页面选择崩溃的包,右键选择Show in Finder。(包一定要选对,不然内存地址定位会出错)
打开Finder页面后选择的包会显示高亮,右键,选择显示包内容。
点击显示包内容后会看到dSYNs文件夹,点进去会找到这个appName.dSYM文件,将它拷贝到一个文件里(最好是在桌面上单独创建一个crash文件夹)。然后就可以关掉这个窗口了。
点击桌面上你新建的crash文件夹,右键appName.dSYM,点击显示包内容,然后依次打开Contents-Resources-DWARF(这里就一个文件夹链),找到appName文件,将它也拷贝到crash文件夹中。
打开终端,cd crash文件夹目录(直接把文件夹拖进终端,自动显示目录),然后输入xcrun atos arm64 -o appName crashAddress
其中arm64要根据在哪个型号的机器崩溃自行确定,可能是armv7,如果是模拟器的话用i386

其实用堆文件分析有3种情况

1. 直接标出了错误位置的

3   FIR        0x000000010bfddd8c -[FIRViewController viewDidLoad] + 8588

2.未标记错误位置,有基地址的情况:

3   FIR           0x000e3e92 0xd3000 + 69266

这条调用栈包括下面四部分:
模块号: 这里是3
二进制库名: 这里是 FIR.im
调用方法的地址: 这里是 0x000e3e92
第四部分分为两列,基地址和偏移地址。此处基地址为 0xd3000,偏移地址为 69266。
使用下面的命令符号化:
atos -arch armv7 -o FIR -l 0xd3000 0x000e3e92

 结果: [FIRViewController viewDidLoad] (FIRViewController.m:156)

可以看到崩溃的类为 FIRViewController,函数为 viewDidLoad,文件名是 FIRViewController.m,行数是 156 行。

3.未标记错误位置,无基地址的情况:

3   FIR            0x000f0e97 FIR + 69271
 

计算基地址   方法地址-偏移地址

-load address = 0x000f0e97 - 69271 =0xe0000. 说一下这种计算方式 把方法地址转换成10进制数据减去偏移的地址量 就是基地址的10进制表达式,再转换成16进制表示就可以了 16进制表示前面要加0x

使用下面的命令符号化:

atos -arch armv7 -o FIR -l 0xe0000 0x000f0e97
-[FIRViewController viewDidLoad] (FIRViewController.m:156)

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值