Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS如何获取崩溃日志

iOS如何获取崩溃日志

作者头像
测试加
发布于 2022-12-05 04:19:27
发布于 2022-12-05 04:19:27
3.4K00
代码可运行
举报
运行总次数:0
代码可运行

前言

在日常测试iOS中会经常遇到App崩溃的情况,然后给研发提bug。如果就提bug就有一两句话描述,研发很难精准排查问题,所以作为测试人员需要提供崩溃日志或者崩溃堆栈辅助研发排查问题。

本文介绍几种常用获取崩溃日志的方法,可以帮助大家在工作中提高工作效率和协作效率。

iOS获取日志方法

Xcode工具

先来介绍一种最简单的方式使用Xcode工具方式,手机和mac连接后,打开Xcode选择window进入Organizer,在Organizer窗口上,选中Devices 标签栏。

image

在左侧的导航面板上,选中View Device Logs,如下图所示:

Logs菜单就可以看到mac曾经同步过的iOS设备的崩溃日志。

libimobiledevice工具

可能有些同学电脑并没有安装Xcode工具,Xcode的安装下载和安装比较麻烦。这里介绍一种使用第三方工具libimobiledevice的方法。

libimobiledevice是什么?

libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。

ideviceinstaller是libimobiledevice中的一个命令行工具,ideviceinstaller可以实现安装app,卸载app查看当前电脑连接的设备等操作,和Android的adb命令相似。

libimobiledevice安装

  • brew update
  • brew install libimobiledevice libimobiledevice中并不包含ipa的安装命令,所以还需要安装
  • brew install ideviceinstaller
  • 卸载 brew uninstall libimobiledevice

ideviceinstaller常用命令

命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。

  • 安装ipa包,卸载应用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceinstaller -i xxx.ipa
  • 命令卸载应用,需要知道此应用的bundleID
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ideviceinstaller -U [bundleID]
  • 查看系统日志
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicesyslog
  • 查看当前电脑连接的设备
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevice_id --list
打印出来的是udid
  • 屏幕截屏
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicescreenshot
  • 获取设备时间
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicedate
  • 获取设备名称
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicename

idevicecrashrepor崩溃日志

libimobiledevice中的idevicecrashreport工具可以导出真机crash日志,工具位置在tools下。

参数介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-e, --extract        extract raw crash report into separate '.crash' file

-k, --keep        copy but do not remove crash reports from device
保存到本地文件夹中,需要先手动创建

-d, --debug        enable communication debugging

-u, --udid UDID    target specific device by its 40-digit device UDID
设备的udid

-h, --help        prints usage information

用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicecrashreport -u 86616cbaa40e52d3f9236ec982dd6f1e933a44bd -e -k /Users/xinxi/Desktop/crash

idevicecrashrepor工具有个缺点在,本地文件夹中导出手机所有的crash日志,没有过滤自定包名的功能、导出的数据量太大了,不方便查看。

但是可以通过修改源码可以增加grep包名功能,导出自定包名的crash日志,如果需要源代码可以关注公众号回复"崩溃日志"即可获取。

过滤包名用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idevicecrashreport -u 25228488f97b79c515ab32a2792b83e24ee022de -e  -g LuoJiFM -k /Users/xinxi/Desktop/crashnew

文件格式: LuoJiFM-IOS-2017-05-18-180437.ips.synced,然后把.synced去掉。

崩溃日志符号解析

通过上面两种方式,我们可以拿到crash后的文件。但是crash日志包含很多字符是16进制的,无法看到具体的类名和方法名,所以需要通过把crash文件符号化。

准备工作:

创建一个crashlog的文件夹

转化符号工具:

dsym(符号表文件)

相当于类名和方法名的参考表,Xcode打包的时候会自动产生,我本地的路径在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/Build/Products/ONLINE-iphonesimulator/LuoJiFMIOS.app.dSYM

崩溃日志

用idevicecrashreport工具导出,或者用xcode查看

symbolicatecarsh

symbolicatecarsh是xcode自带解析crash的工具,一般会在xcode安装包下

搜索本地symbolicatecarsh文件

命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
find /Applications/Xcode.app -name symbolicatecrash -type f

我本地的文件地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

给symbolicatecarsh文件权限

命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

把这三个都放到crashlog文件夹中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd crashlog的文件夹下

转化执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./symbolicatecrash LuoJiFM-IOS-2017-04-26-152505.crash LuoJiFMIOS.app.dSYM > newcrash.log

执行过程有出现个warning,可以忽略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Warning: Unable to symbolicate from required binary: /Users/xinxi/Library/Developer/Xcode/iOS DeviceSupport/10.3.1 (14E304)/Symbols/System/Library/Frameworks/CoreMotion.framework/CoreMotion

手动制造一个崩溃

在启动的时候的增加一处断言失败

代码片段:

//判断是否点击了随便看看按钮。 if ([FMAccountUtils isAppLogin] || UDBool(kUserDefault_IsCasualLook) == YES){ NSAssert(1 == 2, @"NSAssert test"); NSLog(@"NSAssert test",1); //断言崩溃 return; }

崩溃日志分析

crash文件文件: LuoJiFMIOS_2018-04-14-211457_xinxideMacBook-Pro.crash

崩溃日志片段

进程信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Process:              
LuoJiFMIOS [49850]
Path:                  /Users/USER/Library/Developer/CoreSimulator/Devices/DDAC13B0-786D-4DC7-A920-4BEAF56CD616/data/Containers/Bundle/Application/75271871-1E72-4F00-94E0-DC7A353C939B/LuoJiFMIOS.app/LuoJiFMIOS
Identifier:            LuoJiFMIOS
Version:               3.1.9 (3.2.3)
Code Type:             X86-64 (Native)
Parent Process:        launchd_sim [49410]
Responsible:           LuoJiFMIOS [49850]
User ID:               501
设备信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date/Time:             2018-04-14 21:10:43.057 +0800
OS Version:            Mac OS X 10.13.2 (17C88)
Report Version:        12
Bridge OS Version:     3.0 (14Y661)
Anonymous UUID:        B687F0B1-763A-73D8-85CC-AD93B3C9F5D8

Sleep/Wake UUID:       E387E09E-8D4A-413B-B96F-01861A8A0708

Time Awake Since Boot: 53000 seconds
Time Since Wake:       1800 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread
异常
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

原因,其中reason就是具体原因

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Application Specific Information:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSAssert test'
terminating with uncaught exception of type NSException
abort() called
CoreSimulator 494.33 - Device: iPhone SE - Runtime: iOS 11.2 (15C107) - DeviceType: iPhone SE

特定于应用程序的追溯,Application Specific Backtrace 1:

从红框中可以看出在AppDelegate setRootController

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS崩溃日志ips文件解析
  测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下图这样的,都是一些十六进制的堆栈地址,如果仅仅根据这些堆栈地址,我们基本无法做任何事情,连最基本的崩溃定位都做不到。那么,在iOS开发中,还有一些其他的方法可以帮助我们将这些堆栈信息转化为可视化的日志文件,在转化后的可视化日志文件中,我们可以清晰定位到我们的应用崩溃的位置,如下图2所示。
mukekeheart
2018/08/20
7.6K0
iOS崩溃日志ips文件解析
iOS自动化工具tidevice初探
在日常iOS研发或者测试中,经常会对手机进行设备udid、应用包名、安装app、卸载app等操作。
测试加
2022/06/21
2.6K0
iOS自动化工具tidevice初探
​iOS Class Guard github用法、工作原理和安装详解及使用经验总结
iOS Class Guard是一个用于OC类、协议、属性和方法名混淆的命令行工具。它是class-dump的扩展。这个工具会生成一个symbol table,这个table在编译期间会包含进工程中。iOS-Class-Guard能有效的隐藏绝大多数的类、协议、方法、属性和 实例变量 名。iOS-Class-Guard不是应用安全的最终解决方案,但是它绝对能让攻击者更难读懂你的程序。iOS-Class-Guard会加大代码分析和runtime检查的难度,这个工具可以认为是一个简单基础的混淆方法。由于OC的架构决定了iOS应用程序的剖析相当简单,check out一下链接就知晓了:
iOS Magician
2023/12/02
3640
​iOS Class Guard github用法、工作原理和安装详解及使用经验总结
使用symbolicatecrash解析了一个crash log
有一天,测试同学给了我一个未经符号化的崩溃日志。如果是以前,我会找到打这个测试包的同事,让他将奔溃日志符号化后发给我。但是这次,我老板傲娇的拒绝了,而是让我自己来做符号化的工作>.<
且行且珍惜_iOS
2021/09/07
9120
iOS开发——解析崩溃日志
在实际的开发过程中,作为开发者的我们常常会碰到一种场景,那就是真机调试时崩溃了,而有时又不能在Xcode中打印出崩溃信息,那么这时候我们就必须要获取到崩溃原因,从而解决问题。
Originalee
2018/08/30
1.4K0
iOS开发——解析崩溃日志
使用libimobiledevice + ifuse提取iOS沙盒文件
libimobiledevice:一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。
周希
2019/10/15
3.4K0
使用libimobiledevice + ifuse提取iOS沙盒文件
使用libimobiledevice&ifuse提取iOS沙盒文件
libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch 等iOS设备。由于苹果官方并不支持Linux系统,但是Linux上的高手绝对不能忍受因为要连接iOS设备就换用操作系统这个事儿。因此就有人逆向出iOS设备与Windows/Mac Host接口的通讯协议,最终成就了横跨三大桌面平台的非官方版本USB接口library。经常用Linux系统的人一定对libimobiledevice不陌生,但是许多Windows和Mac用户也许就不知道了。事实上,它同iTools一样,都是可以替代iTunes,进行iOS设备管理的工具。因为源码是开放的,可以自行编译,所以对很多开发者而言可以说更为实用。
用户6094182
2020/08/20
1.7K0
App自动化测试探索(二)MAC环境搭建iOS+Python+Appium测试环境
5. 安装 node(目的是安装 npm)官方下载地址https://nodejs.org/en/download/,下载.pkg 文件安装
周希
2019/10/15
7620
IOS自动化—将WDA打包ipa批量安装驱动
在之前写的IOS自动化教程中,我都是采用的Mac电脑连接ios设备,使用Xcode一个个进行打包,非常麻烦。
梦无矶小仔
2023/08/03
1.8K0
IOS自动化—将WDA打包ipa批量安装驱动
XCode日常使用备忘录
0. Introduction        XCode是macOS上开发app不可缺少的开发者工具,不管是开发macOS上的应用,还是iOS上的应用,都离不开XCode环境。尽管其易用性广受诟病,但由于苹果app开发的封闭性,众多开发者也不有苦不能言。近年来微软针对macOS平台发布了Visual Studio Code和Visual Studio for Mac这两款开发工具,但是其目的显然只是作为XCode的一种补充,要全盘替代XCode目前还不太现实。平时工作中由于负责开发维护Windows和Mac
24K纯开源
2018/01/18
1.8K0
XCode日常使用备忘录
扒虫篇-崩溃日志解读及Crash收集
崩溃是让发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很重要。调试阶段是比较容易找到出问题的地方的,但是已经上线的app并分析崩溃报告就比较麻烦了。最终,我们可以通过iOS崩溃日志在大多数情况下,你能从中了解到关于闪退的详尽、有用的信息。线上崩溃可以通过 iTunesConnect 中心的Cash收集,也可以通过第三方Cash收集工具,亦或自己在工程中手动收集崩溃日志上传到服务器中,本文做个小结,希望对初入者能有些帮助。
進无尽
2018/09/12
3K0
扒虫篇-崩溃日志解读及Crash收集
Xcode 常见 CLI 工具
在咱们日常开发中,或多或少都会用到 Xcode 内置的一些CLI工具,但是大部分小伙伴可能只是会用到一些具体的命令,今天我们就一起来聊一聊 Xcode 内置的常见Command Lines Tool。
CoderStar
2022/09/23
3.6K0
深入理解iOS Crash Log
USB连接设备,接着在XCode菜单栏依次选择:Window -> Devices And Simulators,接着选择View Device Logs
用户2932962
2019/07/31
4.4K1
深入理解iOS Crash Log
iOS命令行工具
libimobiledevice:使用本机协议与 iOS 真机设备上的服务进行通信的开源包
沈宥
2022/06/21
2.4K0
iOS 使用Xcode自带工具symbolicatecrash解析Crash文件
每次遇到闪退信息的时候都要敲一遍命令,所以趁现在写个脚本来解析闪退信息,需要的信息有文件有:
傅_hc
2019/12/23
3.6K0
有赞crash平台符号化实践
有赞在基础保障平台的实践中完成了 Crash平台 的建设,但是iOS的崩溃日志未经符号化,排查问题比较困难。为了降低iOS App的crash率,快速排查线上crash,疑难crash的跟踪处理,符号化崩溃日志显得尤为重要!
有赞coder
2020/09/21
1.5K0
有赞crash平台符号化实践
Appium中iOS环境搭建指南
最近在搞iOS自动化环境基于Appium框架,Appium框架搭建iOS每当捡起来使用就各种坑,总结一下iOS自动化环境搭建问题,避免其他同学踩坑~
测试加
2022/12/05
1.7K0
Appium中iOS环境搭建指南
Flutter入门第一讲:环境搭建(mac os为例)
《Flutter零基础入门》,从无到有构建Android、iOS双平台APP,更新中…
毛大姑娘
2020/09/10
1.7K0
Flutter入门第一讲:环境搭建(mac os为例)
IOS自动化的那些经验
在自动化中,IOS我们可以用libimobiledevice来辅助做一些工作,用xcrun simctl可以来操纵模拟器,具体咋用呢?
赵云龙龙
2019/11/09
2.6K0
iOS_crash文件的获取及符号化(解析)
稍等一会,就会输出路径,然后将路径复制,右键 Finder -> 前往文件夹 -> 粘贴 -> 回车,就能找到symbolicatecrash,将symbolicatecrash拷贝出来备用
mikimo
2023/10/18
2.5K1
相关推荐
iOS崩溃日志ips文件解析
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验