当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集成运用相关推荐

  1. Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线

    Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线 我们在开发中常常会注意到一些Crash,这正是很头疼的,而且Crash会带来很多意想不到的状态,很恶心 ...

  2. iOS Crash日志分析必备:符号化系统库方法

    如果你有过分析iOS崩溃日志的经验,一定经常看到日志里出现很多<redacted>的字段.这篇文章就是帮助开发者将这些字段符号化为对应的系统库方法名. 如果你已经掌握了这方面的知识,就直接 ...

  3. ios 捕抓crash_ios crash的原因与抓取crash日志的方法

    首先我们经常会闪退的异常有哪些呢?crash的产生来源于两种问题:违反iOS策略被干掉,以及自身的代码bug. 1.IOS策略 1.1低内存闪退 前面提到大多数crash日志都包含着执行线程的栈调用信 ...

  4. iOS crash 问题分析汇总

    在这里插入图片描述 iOS crash 问题分析 iOS crash 常用分析工具 IOS 崩溃日志 iOS crash 原因分析 1.调用悬浮指针 2.数组越界访问 3.调用了未实现的方法 4.调用 ...

  5. iOS实录15:浅谈iOS Crash

    导语:在当前的iOS开发中,虽然ARC为开发者解决了手动内存管理时代 的许多麻烦,但是内存方面的问题依然是产生iOS Crash的元凶之一,本文介绍内存方面,有关僵尸对象.野指针.内存泄漏.废弃内存这 ...

  6. IOS Crash信息收集

    IOS Crash信息收集 领导安排收集App Crash信息,我通过苹果提供的NSSetUncaughtExceptionHandler和对信号的监听来实现.它可以获取大部分奔溃信息,但是对于比较复 ...

  7. 了解和分析iOS Crash

    作者:孟嵩,腾讯高级开发工程师  商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:wetest.qq.com/lab/view/40- WeTest 导读 北京时间凌晨一点, ...

  8. 了解和分析iOS Crash Report

    翻译自苹果官方文档:Understanding and Analyzing Application Crash Reports nimo: 这篇长达1w多字的文章,大概前后翻译了一个月,"写 ...

  9. iOS Crash崩溃异常教你查看和分析

    要学会看crash崩溃和报告 一个应用程序并不总会一直运行的很好,它总会有出现crash崩溃的情况.如果在应用程序中接入了一些第三方的crash收集工具或者自建crash收集报告平台的话将会很好的帮助 ...

最新文章

  1. Visual Studio “类视图”和“对象浏览器”图标含义
  2. Linux文件系统简介及常用命令
  3. 【软考-软件设计师】编译程序基本原理
  4. 用浏览器训练Tensorflow.js模型的18个技巧(上)
  5. 标签传播算法(Label Propagation)及Python实现
  6. 2020年,.NET Core起飞在即,最强日志分析ELK还不会?
  7. .net framework摘抄与理解
  8. 信息学奥赛一本通 1104:计算书费 | OpenJudge NOI 1.6 03
  9. WPF ComboBox样式
  10. pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
  11. 拓端tecdat|R语言如何在生存分析与Cox回归中计算IDI,NRI指标
  12. 最详细的wine配置
  13. 网吧显示最近使用计算机,影子系统怎么用?实现像网吧电脑一样重启后自动还原系统教程...
  14. java gson解析json_Gson解析json数据(转)
  15. 语音处理基础:预加重、分帧、帧移、加窗、傅里叶变换
  16. Android Lost RAM的统计方法
  17. 一些数据采集卡使用过程中常见问题
  18. 英语日常口语对话(2)
  19. 新发的日常小实验——使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍数(Unity、PIL、Pillow、压缩)
  20. 自己实现notifyDatasetChanged

热门文章

  1. 剑指offer-从尾到头打印链表03
  2. redis学习-03
  3. 埃森哲:AI成新生产要素,2035年将中国经济增速提高1.6% | 附下载
  4. 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
  5. OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
  6. Introduction to Oracle9i: SQL------- left join 和 left outer join 的区别
  7. [PBRT-V3]怎么对比不同渲染算法的效果
  8. 多线程编程、线程同步|安全和线程通信
  9. 5.1(统计正数和负数的个数然后计算这些数的平均值)
  10. html图片自动剪裁,HTML canvas图像裁剪