前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS如何获取崩溃日志

iOS如何获取崩溃日志

作者头像
测试加
发布2022-12-05 12:19:27
2.7K0
发布2022-12-05 12:19:27
举报

前言

在日常测试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包,卸载应用
ideviceinstaller -i xxx.ipa
  • 命令卸载应用,需要知道此应用的bundleID
ideviceinstaller -U [bundleID]
  • 查看系统日志
idevicesyslog
  • 查看当前电脑连接的设备
idevice_id --list
打印出来的是udid
  • 屏幕截屏
idevicescreenshot
  • 获取设备时间
idevicedate
  • 获取设备名称
idevicename

idevicecrashrepor崩溃日志

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

参数介绍:

-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

用法:

idevicecrashreport -u 86616cbaa40e52d3f9236ec982dd6f1e933a44bd -e -k /Users/xinxi/Desktop/crash

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

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

过滤包名用法:

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打包的时候会自动产生,我本地的路径在:

~/Build/Products/ONLINE-iphonesimulator/LuoJiFMIOS.app.dSYM

崩溃日志

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

symbolicatecarsh

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

搜索本地symbolicatecarsh文件

命令:

find /Applications/Xcode.app -name symbolicatecrash -type f

我本地的文件地址:

/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

给symbolicatecarsh文件权限

命令:

export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

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

cd crashlog的文件夹下

转化执行命令:

./symbolicatecrash LuoJiFM-IOS-2017-04-26-152505.crash LuoJiFMIOS.app.dSYM > newcrash.log

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

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

崩溃日志片段

进程信息
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
设备信息
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
异常
Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

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

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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • iOS获取日志方法
    • Xcode工具
      • libimobiledevice工具
        • libimobiledevice是什么?
        • libimobiledevice安装
        • ideviceinstaller常用命令
        • idevicecrashrepor崩溃日志
      • 崩溃日志符号解析
        • 手动制造一个崩溃
          • 崩溃日志分析
            • 崩溃日志片段
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档