iOS Crash常规跟踪方法及Bugly集成运用
当app出现崩溃, 研发阶段一般可以通过以下方式来跟踪crash信息
#1.模拟器运行, 查看xcode错误日志
#2.真机调试, 查看xcode错误日志
#3.真机运行, 查看device系统日志
下面举例说明, 先写一段会Crash的代码crashdemo:
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.[self performSelector:@selector(print) withObject:nil afterDelay:5]; }- (void)print {NSArray *array = @[];NSLog(@"%@", array[1]); }
Demo#1.模拟器运行, 查看xcode错误日志
程序执行后会立即崩溃, 打开xcode系统日志可以看到以下错误信息
2016-10-29 12:13:29.015 CrashDemo[37842:7436441] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray' *** First throw call stack: (0 CoreFoundation 0x00b7ba84 __exceptionPreprocess + 1801 libobjc.A.dylib 0x00642e02 objc_exception_throw + 502 CoreFoundation 0x00b22390 __CFArrayGetTypeID_block_invoke + 03 CoreFoundation 0x00ac07f8 -[NSArray objectAtIndexedSubscript:] + 404 CrashDemo 0x000877b7 -[ViewController print] + 875 Foundation 0x00250d71 __NSFireDelayedPerform + 4426 CoreFoundation 0x00acd576 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 227 CoreFoundation 0x00accf72 __CFRunLoopDoTimer + 12508 CoreFoundation 0x00a8b25a __CFRunLoopRun + 22029 CoreFoundation 0x00a8a706 CFRunLoopRunSpecific + 47010 CoreFoundation 0x00a8a51b CFRunLoopRunInMode + 12311 GraphicsServices 0x041e4664 GSEventRunModal + 19212 GraphicsServices 0x041e44a1 GSEventRun + 10413 UIKit 0x00f0c1eb UIApplicationMain + 16014 CrashDemo 0x00087bba main + 13815 libdyld.dylib 0x03189a21 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
通过xcode日志可以看到是数组访问越界, 发生越界的方式名为print 针对这个demo我们当然很清楚是刚才列的array[1]发生越界, 但对于一个完整的程序如何查看是在哪个地方发生越界的呢?这个时候我们可以利用xcode的Show the breakpoint navigator功能, 点加号选择add exception breakpoint这个时候我们在执行程序, xcode执行会自动停在要发生crash的代码段 Demo#2.真机调试, 查看xcode错误日志如果有添加exeception point, 程序会自动停到打印array[1]那一行. 如果没有添加则程序会crash, xcode会出现以下错误日志
2016-10-29 12:15:53.561 CrashDemo[1062:316582] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArray0 objectAtIndex:]: index 1 beyond bounds for empty NSArray' *** First throw call stack: (0x211b398b 0x2094ee17 0x211433e7 0xc5a3b 0x219d1ad5 0x211765ff 0x21176231 0x2117407d 0x210c32e9 0x210c30d5 0x226b3ac9 0x257880b9 0xc5c99 0x20d6b873) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
通过错误信息我们只能看到是有发生数组访问越界, 如果有添加exeception breakpoint则会自动停在发生error的代码行.
Demo#3. 真机运行, 查看device系统日志
xcode停止运行这个crashdemo, 选择xcode window - devices, 选择手机 - view device logs
然后在手机上运行crashdemo, 在device logs中按时间排序查看最新的log就能看到crashdemo的crash log
Incident Identifier: 9A4C52F0-B0D7-42C9-A7CB-D4D3321D00D5 CrashReporter Key: 90f4d3621773443794fa73f506fd6bdef49fc269 Hardware Model: iPhone4,1 Process: CrashDemo [1074] Path: /private/var/containers/Bundle/Application/1307034E-9C2B-451F-ACD9-04C97DEC047B/CrashDemo.app/CrashDemo Identifier: PEGA.CrashDemo Version: 1 (1.0) Code Type: ARM (Native) Parent Process: launchd [1]Date/Time: 2016-10-29 12:21:49.49 +0800 Launch Time: 2016-10-29 12:21:43.43 +0800 OS Version: iOS 9.3.1 (13E238) Report Version: 104Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Triggered by Thread: 0Filtered syslog: None foundLast Exception Backtrace: 0 CoreFoundation 0x211b3986 __exceptionPreprocess + 122 1 libobjc.A.dylib 0x2094ee12 objc_exception_throw + 34 2 CoreFoundation 0x211433e2 -[__NSArray0 objectAtIndex:] + 110 3 CrashDemo 0x000e6a36 0xe0000 + 27190 4 Foundation 0x219d1ad0 __NSFireDelayedPerform + 464 5 CoreFoundation 0x211765fa
这些在开发阶段都能很简便的实现, 但是当app发布出去后用户发生crash呢? 一般用户只能反馈在做什么的时候发生crash
然后我们在去做尝试是否能遇到, 不过这样效率不高而且一般很难复现到用户的crash
Bugly的出现解决的这个问题
Bugly SDK在当程序崩溃时, 会自动将错误信息发送到服务器方便开发人员查看分析
那么如何使用Bugly?
首先先到https://bugly.qq.com/v2/注册账号, 并注册app下载SDK包
将Bugly.framework拖拽到工程中, 记得勾选copy if needed.
然后添加libz.tbd / libstdc++.tbd / Security.framework / SystemConfiguration.framework到工程中
delegate.m中注册
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Bugly startWithAppId:@"此处替换为你的AppId"]; return YES; }
这样当程序发生崩溃时, 崩溃信息会自动发送到服务器登录你的bugly账号就能查看到了
转载于:https://www.cnblogs.com/zhouxihi/p/6010636.html
iOS Crash常规跟踪方法及Bugly集成运用相关推荐
- Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线
Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线 我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心 ...
- iOS Crash日志分析必备:符号化系统库方法
如果你有过分析iOS崩溃日志的经验,一定经常看到日志里出现很多<redacted>的字段.这篇文章就是帮助开发者将这些字段符号化为对应的系统库方法名. 如果你已经掌握了这方面的知识,就直接 ...
- ios 捕抓crash_ios crash的原因与抓取crash日志的方法
首先我们经常会闪退的异常有哪些呢?crash的产生来源于两种问题:违反iOS策略被干掉,以及自身的代码bug. 1.IOS策略 1.1低内存闪退 前面提到大多数crash日志都包含着执行线程的栈调用信 ...
- iOS crash 问题分析汇总
在这里插入图片描述 iOS crash 问题分析 iOS crash 常用分析工具 IOS 崩溃日志 iOS crash 原因分析 1.调用悬浮指针 2.数组越界访问 3.调用了未实现的方法 4.调用 ...
- iOS实录15:浅谈iOS Crash
导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...
- IOS Crash信息收集
IOS Crash信息收集 领导安排收集App Crash信息,我通过苹果提供的NSSetUncaughtExceptionHandler和对信号的监听来实现.它可以获取大部分奔溃信息,但是对于比较复 ...
- 了解和分析iOS Crash
作者:孟嵩,腾讯高级开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:wetest.qq.com/lab/view/40- WeTest 导读 北京时间凌晨一点, ...
- 了解和分析iOS Crash Report
翻译自苹果官方文档:Understanding and Analyzing Application Crash Reports nimo: 这篇长达1w多字的文章,大概前后翻译了一个月,"写 ...
- iOS Crash崩溃异常教你查看和分析
要学会看crash崩溃和报告 一个应用程序并不总会一直运行的很好,它总会有出现crash崩溃的情况.如果在应用程序中接入了一些第三方的crash收集工具或者自建crash收集报告平台的话将会很好的帮助 ...
最新文章
- Visual Studio “类视图”和“对象浏览器”图标含义
- Linux文件系统简介及常用命令
- 【软考-软件设计师】编译程序基本原理
- 用浏览器训练Tensorflow.js模型的18个技巧(上)
- 标签传播算法(Label Propagation)及Python实现
- 2020年,.NET Core起飞在即,最强日志分析ELK还不会?
- .net framework摘抄与理解
- 信息学奥赛一本通 1104:计算书费 | OpenJudge NOI 1.6 03
- WPF ComboBox样式
- pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
- 拓端tecdat|R语言如何在生存分析与Cox回归中计算IDI,NRI指标
- 最详细的wine配置
- 网吧显示最近使用计算机,影子系统怎么用?实现像网吧电脑一样重启后自动还原系统教程...
- java gson解析json_Gson解析json数据(转)
- 语音处理基础:预加重、分帧、帧移、加窗、傅里叶变换
- Android Lost RAM的统计方法
- 一些数据采集卡使用过程中常见问题
- 英语日常口语对话(2)
- 新发的日常小实验——使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍数(Unity、PIL、Pillow、压缩)
- 自己实现notifyDatasetChanged
热门文章
- 剑指offer-从尾到头打印链表03
- redis学习-03
- 埃森哲:AI成新生产要素,2035年将中国经济增速提高1.6% | 附下载
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
- OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
- Introduction to Oracle9i: SQL------- left join 和 left outer join 的区别
- [PBRT-V3]怎么对比不同渲染算法的效果
- 多线程编程、线程同步|安全和线程通信
- 5.1(统计正数和负数的个数然后计算这些数的平均值)
- html图片自动剪裁,HTML canvas图像裁剪