精华内容
下载资源
问答
  • 突然有一天,领导的Android手机中的程序运行停止了,这告诉...‘2%左右’,‘这有点高啊,以后要降到0.2%,iOS要立刻发一个版本,降低崩溃率’,然后我们就开始分析Bugly上面的崩溃信息了。目录已解决的bug暂时无解...

    突然有一天,领导的Android手机中的程序运行停止了,这告诉了CTO,CTO立刻通知Android负责人,查询原因,并且询问当前的崩溃率是多少,得知3%左右,Android优化完之后,CTO又问iOS的负责人,iOS现在线上的崩溃率多少啊,‘2%左右’,‘这有点高啊,以后要降到0.2%,iOS要立刻发一个版本,降低崩溃率’,然后我们就开始分析Bugly上面的崩溃信息了。

    目录

    已解决的bug

    暂时无解的bug

    要添加保护的bug

    总结

    崩溃产生的原因

    崩溃率的现状

    我们离优秀还有多远

    已解决的bug

    UIWebView加载网页中进入后台崩溃

    网页中使用了OpenGL ES绘制,根据Apple的要求,这个不能在后台绘制的(An OpenGL ES application will be terminated if it attempts to execute OpenGL ES commands in the background.),解决方案:

    就是网页提供绘制开始和停止的接口供原生在进入后台和切换到前台时使用,但是我们使用的是其他厂家提供的链接,没有此接口。

    在前后台切换时,停止和重新加载UIWebView,调用stopLoading但是还是会在后台绘制,并不能停止OpenGL ES的绘制,所以排除此方法。

    改用WKWebView,因为这是Apple的bug,所以使用最新的API去替换,但是其他厂家提供的链接不支持WKWebView。

    在Apple Forum中有开发者指出这是Apple的bug,并提供了解决方法,在进入后台时调用webView:enableGL方法设置为NO,进入前天后,调用webView:enableGL方法设置为YES。

    typedef void (*CallFuc)(id, SEL, BOOL);

    typedef BOOL (*GetFuc)(id, SEL);

    -(BOOL)webView:(UIWebView*)view enableGL:(BOOL)bEnable

    {

    BOOL bRet = NO;

    do

    {

    Ivar internalVar = class_getInstanceVariable([view class], "_internal");

    if (!internalVar)

    {

    NSLog(@"enable GL _internal invalid!");

    break;

    }

    UIWebViewInternal* internalObj = object_getIvar(view, internalVar);

    Ivar browserVar = class_getInstanceVariable(object_getClass(internalObj), "browserView");

    if (!browserVar)

    {

    NSLog(@"enable GL browserView invalid!");

    break;

    }

    id webbrowser = object_getIvar(internalObj, browserVar);

    Ivar webViewVar = class_getInstanceVariable(object_getClass(webbrowser), "_webView");

    if (!webViewVar)

    {

    NSLog(@"enable GL _webView invalid!");

    break;

    }

    id webView = object_getIvar(webbrowser, webViewVar);

    if (!webView)

    {

    NSLog(@"enable GL webView obj nil!");

    }

    if(object_getClass(webView) != NSClassFromString(@"WebView"))

    {

    NSLog(@"enable GL webView not WebView!");

    break;

    }

    SEL selector = NSSelectorFromString(@"_setWebGLEnabled:");

    IMP impSet = [webView methodForSelector:selector];

    CallFuc func = (CallFuc)impSet;

    func(webView, selector, bEnable);

    SEL selectorGet = NSSelectorFromString(@"_webGLEnabled");

    IMP impGet = [webView methodForSelector:selectorGet];

    GetFuc funcGet = (GetFuc)impGet;

    BOOL val = funcGet(webView, selector);

    bRet = (val == bEnable);

    }while(NO);

    return bRet;

    }

    上一个方法中能解决一定概率的崩溃问题,但是不能从根本上解决,还是存在一定概率的崩溃,所以改用进入后台时,加载空白页面,移除UIWebView,清除delegate,销毁UIWebView。为什么还需要销毁呢?

    因为只加载空白页的话,回到前台在加载之前的URL,那么加载出来之后点击返回的时候,会多了一层空白页,而不是返回上一个视图

    我的评论中方法currentCalendar在iOS 9上崩溃的问题

    崩溃是iOS 9上的bug,替换为最新的方法[NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian],最新的方法支持到最低支持iOS 8。

    暂时无解的bug

    之所以称为无解的bug是因为:

    没有测试设备支持我们测试和调试,许多问题出现在9.3.5和8.1.3中,但是没有设备测试。

    程序启动直接崩溃,根据提供的信息无法判断是什么导致的,有可能跟极光推送的SDK有关系,但是咨询极光推送的技术支持说肯定不是他们SDK的问题,应该是程序中可能移动文件夹导致的崩溃。

    真的一无所有的bug,对于此类bug,真的是欲哭无泪,任何信息没有无法根据已有的信息判断出来。

    要添加保护的bug

    有些bug需要添加保护,因为Objective-C给了用户太高的授权,导致产生各种不应该产生的bug

    比如数组越界

    字典里面添加nil。

    对于KVO、KVC也需要添加保护,防止不配对的情况。

    不同类型比较,比如NSString的方法isEqualToString经常和NSNumber类型的比较

    虽然项目中有对字典或数组的保护,但是需要开发者主动去调用,比如safeObjectAtIndex数组,有时候就容易忘记,所以需要添加保护,不论用户是否调用array[0],还是[array objectAtIndex:0],都可以自动去处理。

    总结

    崩溃产生的原因

    由于网络环境、设备机型、开发环境等多样元素的存在,应用性能问题组合起来查过2亿种可能,连接超时、闪退、卡顿、崩溃、网络劫持、交互性差、CPU使用率问题、内存泄漏等对移动互联网的性能产生重大影响。

    其中崩溃是最严重的问题,在运行的过程中强行关闭,打断用户正在进行的操作体验。

    应用崩溃带来的后果:

    关键业务终端

    用户留存率下降

    口碑变差

    生命周期价值下降

    现在崩溃率的现状

    cc03d28ca6fde462a8362b027e02bb53.png

    1253121Y0-0.jpg-16kB

    iOS应用崩溃率远高于Android,基本上是Android应用平均崩溃率的5倍,这让人大跌眼镜,颠覆了我的认知观。

    5c072b9bf404bf510e3936cdd47da7fc.png

    792612e70e154784915aaaf5035116e3_th.jpg-24.7kB

    Android系统中,崩溃率最高的是航空行业,崩溃率为2.05%。iOS系统中,O2O、游戏行业崩溃率均在4%以上,其中游戏行业崩溃率高达5.83%。

    我们离优秀还有多远

    8fca80c8c6faccb0691c17a215c70ff9.png

    20150415164715dc357.jpg-95kB

    统计显示,当崩溃率超过8‰的时候,活跃用户明显下降态势。由此看来,移动开发者必须重视移动应用对最新操作系统版本的支持以及旧版本的兼容问题。

    我们现在的崩溃率高达20‰,牢牢站住了严重隐患这一层,领导们给我们的要求是下降一个量级到达2‰,进入优秀层级。

    展开全文
  • 3、检查Bugly后台创建的应用类型是否匹配系统类型(eg:安卓、苹果) 4、Bugly注册初始化需 在Thread.setDefaultUncaughtExceptionHandler 之后 Thread.setDefaultUncaughtExceptionHandler { thread, throwable -&...

    1、检查appId、appKey 是否正确
    2、检查是否注册初始化
    3、检查Bugly后台创建的应用类型是否匹配系统类型(eg:安卓、苹果)
    4、Bugly注册初始化需 在Thread.setDefaultUncaughtExceptionHandler 之后

    Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
        exit(-1)
    }
    
    // 初始化Bugly
    CrashReport.initCrashReport(applicationContext, Bugly_App_ID, BuildConfig.DEBUG)
    

    5、abiFilter 设置支持的架构与报错机型CPU架构不匹配

    展开全文
  • android之bugly崩溃日志过滤

    千次阅读 2019-11-04 16:14:25
    领导定了okr,要我们把bugly崩溃率降到0.1%。 android 10不让获取设备唯一标识,获取就崩溃,这个大家都知道。还有一些其他的方法,如getNeighboringCellInfo(),在android 10上调用也会崩溃 还有这个友盟的...

    领导定了okr,要我们把bugly崩溃率降到0.1%。

    android 10不让获取设备唯一标识,获取就崩溃,这个大家都知道。还有一些其他的方法,如 getNeighboringCellInfo(),在android 10上调用也会崩溃

    还有这个友盟的optJSONObject()这个方法,看了源码,前面还判null了,进方法就成null对象了。

    这些第三方的方法,没办法去改。那咋办,bugly就是有try catch崩溃也会收集上报。

    唉,上有政策下有对策,虽然Bugly官方文档里没说明,还是让我找到个过滤crash的方法

    CrashReport.setCrashRegularFilter("org.json.JSONObject.optJSONObject(java.lang.String);getNeighboringCellInfo() is unavailable to callers targeting Q+ SDK levels.");

    里面的字符串是用";"分割的,每写一个就要加上,但是不要在最后面加“;”,否则会全部不生效,亲测。

    望各位同仁共勉...

     

    展开全文
  • 这种情况就在于我们把应用发布出去了,但是用户那边有着各种各样我们想象不到的系统崩溃,我们无法通过简单的控制台捕获错误信息和崩溃的堆栈内容,那么我们可以利用Bugly这样一个平台,实时查获我们的crash信息。...

      

      Bugly-Crash监控能让我们及时的掌控应用的Crash,并快速修复。这种情况就在于我们把应用发布出去了,但是用户那边有着各种各样我们想象不到的系统崩溃,我们无法通过简单的控制台捕获错误信息和崩溃的堆栈内容,那么我们可以利用Bugly这样一个平台,实时查获我们的crash信息。

      

    1、首先到http://bugly.qq.com 注册一个app ID,要注意iOS和安卓是分开的ID

    2、注册成功后,就可以下载对应版本的SDK

    3、打开SDK的文件夹,可以看到有libc++ 和libstdc++两个版本,具体使用哪个我们要根据我们的项目来定

    4、打开如下位置,可以看到我们使用的是libc++

    5、将SDK文件夹下对应的framework拉入到我们的项目中

    6、在项目中引入如下依赖库(libc++和libz 在要注意区分是不是arm64,会要求contain bitcode)

        

    7、在APPDelegate.m中输入如下代码:

     8、然后我们在项目中简单写一个数组越界的bug,测试一下,当然测试的时候,要注意debug完程序,要先断掉run,然后再单独在应用程序中跑一次

    9、然后就可以在网站去查看crash的信息

     

    转载于:https://www.cnblogs.com/daomul/p/4789894.html

    展开全文
  • http://www.jikexueyuan.com/course/406_8.html
  • 前言之前给项目用过一次bugly,说实话腾讯的这个bugly还是挺方便的,捕捉异常,热更,应用升级,都可以实现,但是太长时间没用,都快给忘记了,今天决定做笔记记录一下集成SDK在的文件中添加依赖和配置属性...
  • 使用Bugly收集并分析App的崩溃信息

    千次阅读 2018-03-01 11:11:41
    崩溃分析也不好用!最近所在项目的App,加了直播功能,总是会出现些不可预见的闪退出现,但通过友盟的崩溃统计分析,真心看的云里雾里的,很不方便,分析工具也不够友好,用起来很麻烦。一些朋友、同行都在用Bugly,...
  • 最近在做公司的一个项目时候,需要在项目中增加一个崩溃异常收集和分析的功能,传统的话... 腾讯的Bugly,面向移动开发者提供专业的Crash监控,崩溃分析等质量跟踪服务,它支持Android和IOS,我的主要使用到Android的
  • https://blog.csdn.net/u013007305/article/details/79668414
  • Unity项目中接入了腾讯的Bugly,通过Bugly后台,我们可以对移动应用进行异常监控、崩溃分析等。 Bugly官网: https://bugly.qq.com/v2/index 二、我们看到的崩溃堆栈 1、Java崩溃 这种情况我们可以比较完整的看到...
  • Unity3D Android使用Bugly定位崩溃问题总结

    千次阅读 热门讨论 2017-10-29 11:58:47
    看着bugly干了1个多月的crash问题处理,可以说是心力憔悴,整天对着一堆莫名其妙的崩溃堆栈和一大把日志发愁,背锅的滋味可是真不好受,得空写一篇总结与各位背锅侠共勉。一般来说游戏的Crash引起原因分为这么几类:...
  • 验证 找到一部cpu架构是aarch64的华为手机,多次用app中弹窗退出的方式退出app, 过一会儿,发现bugly上报崩溃崩溃日志相同。 解决方法 因为需求中必须要能主动退出app, 采用channel的方式实现,java中调用exit(0)...
  • 前言许久没写东西了,换了新工作,新环境,刚来就进行了坑人...由于项目需要,产品中需要接入bugly的相关功能,来收集异常和热修复的功能添加,这里就一起说了正题--下发补丁包1、首先是在项目的build.gradle中的dep...
  • 前言:一种愉快的开发方式,轻松快速定位BUG,跟开发中的BUG说再见!...Bugly是腾讯公司为移动开发者开发的服务之一,是面向移动开发者提供专业的Crash监控,崩溃分析等质量跟踪服务。 Bugly能帮助...
  • iOS-崩溃日志收集(Bugly&BugHD)

    千次阅读 2016-11-05 11:54:14
    别怕,有很多第三方平台帮我们实时监控崩溃日志,并且能分析崩溃的原因及位置等信息下面介绍两款简小的监控奔溃日志平台:Bugly 和 BugHD一 Bugly快速集成1 创建项目,获取AppId点击进入Bugly官网2 集成Bugly SDK ...
  • 1.进入Bugly官方网站,通过收集QQ扫码登录,创建应用. 2.将Bugly SDK通过Pod或者手动介入到项目中,在AppDelegate.m中,导入头文件并且设置AppId #import - (BOOL)application:(UIApplication *)application ...
  • 产品与服务--应用升级 - 腾讯Bugly - 一种愉悦的开发方式 _android anr_android anr分析_iOS崩溃日志分析平台 产品与服务--应用升级 - 腾讯Bugly - 一种愉悦的开发方式 _android anr_android anr分析...
  • Bugly查看代码崩溃到具体的某一行

    千次阅读 2018-12-17 10:35:12
    没有配置符号表的时候 ...得到压缩文件然后去bugly后台上传符号表 把刚才压缩的文件拖到此处上传,完成以后点击确定稍微等待一会 等后台解析完成的可以去看崩溃了的日志了如下图: ...
  • 大家在开发移动APP时,会涉及到很多非产品本身的功能,比如数据统计分析、APP 质量跟踪、APP加密、漏洞扫描分析等等,这些功能目前都有很多第三方的SDK及平台可以使用,这些平台各有特点,很多时候开发者是凭借自己...
  • 腾讯Bugly,简单实用的崩溃日志收集

    万次阅读 2016-07-13 14:00:35
    腾讯 Bugly,是腾讯公司为移动开发者开放的服务之一,面向移动开发者提供专业的 Crash 监控、崩溃分析等质量跟踪服务。Bugly 能帮助移动互联网开发者更及时地发现掌控异常,更全面的了解定位异常,更高效的修复解决...
  • 编写一个数组越界错误,启动App,查看Bugly平台中的崩溃信息 e. 配置iOS符号表 二、创建产品 1、注册并登录账号 https://bugly.qq.com/v2/ 2、输入产品信息(产品名称、类型、产品描述、AppIcon...
  • bugly crash统计和分析

    2017-11-10 17:53:00
    1,官网https://bugly.qq.com/v2/crash-reporting/crashes/4ea154f304?pid=2 新建一个产品 需要一个appid 2,集成pod 'Bugly' ...Bugly/Bugly.h> - (BOOL)application:(UIApplication *)app...
  • Objective_C / Swift项目使用Bugly框架收集上架发版后产品奔溃信息
  • 腾讯bugly

    千次阅读 2017-05-10 22:18:23
    腾讯bugly,对应用实现监控、崩溃分析等质量跟踪服务,作为开发者来说是一个极大的方便啊!第一次体验感觉效果还不错!这个是官网的集成帮助文档: ...
  • Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs ...异常捕获 崩溃 Bugly ACRC 简介 总结 目录 目录腾讯 Bugly介绍最简单的接入配置高级功能上传开发者catc...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,380
精华内容 552
关键字:

bugly崩溃分析