QQBugly 一种愉悦的开发方式

在我们线上app 中,我们的电商项目集成了QQBugly ,但是我们没有勾选自动上传 DYSM 符号表,所以我们要手动上传 ;

算是给腾讯Bugly打个广告吧,腾讯Bugly官网地址,需要的开发们,自行研究一下,或者听我给你讲一讲;

官方集成文档地址(ios)

集成教程我就不说了,文档很详细,为啥要写这篇博客呢,为了记录帮助自己理解和消化;

什么是符号表?

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

<起始地址> <结束地址> <函数> [<文件名:行号>]


说直白点,就是利用符号表,帮你找到出错的代码;
哇:这么神奇,对,就是这么神奇;
我们用的是第二种方式 提取dSYM文件的符号表文件并上传

官方给的工具链接 集成文档内有,我教你如何用就好;

1. 下载官方工具,放到了一个文件夹;

2. 找到线上 ipa 的 dSYM

打开XcodeWindow 的选项中的 Organizer 找到上次打包生成的 文件;如图



如果你告诉我,你删了,或者找不到dSYM 文件,小编只能告诉我,我也很无奈,下次记得备份每个版本的 dSYM ,不然就用 第一种方式上传 dSYM 吧,省去很多麻烦;

3. 打开 终端工具 键入命令:
java -jar /Users/pengchao/Desktop/buglySymboliOS2/buglySymboliOS.jar -i /Users/pengchao/Desktop/test/SpringTour.app.dSYM -o 0801.zip

实用命令 第一个参数[ ] 表示buglySymboliOS.jar 的路径,第二个参数[ ] 表示dSYM的路径,第三个参数[ ]表示生成的zip的名称;
java -jar [buglySymboliOS.jar路径] -i [xxx.app.dSYM的路径] -o [xxx.zip]

例如:
java -jar /Users/pengchao/Desktop/buglySymboliOS2/buglySymboliOS.jar -i /Users/pengchao/Desktop/test/SpringTour.app.dSYM -o 0801.zip

生成zip 成功,在finder 搜索 0801.zip ,然后到腾讯Bugly 的官网,找到那个发生闪退的bug ;

4. 上传 zip 符号表

在没有上传符号表之前,我们是看不懂的;截图如下;

上传成功;我们看到了,截图告诉我们,哪个控制器的,哪个 ViewMode 出错,在哪 一行,都清晰可见,现在我们就去看代码,找代码,复现bug。(最好是找到出错设备的那个软件版本,最好的机型相同);

5. 通过 提示信息 找错误代码;

根据提示一步步的找到了 STHome2017ViewController viewDidLoad 方法
[STHome2017ViewModel startNetWork] 里面的 [STHome2017ViewModel topBannerDataBatch:failure:] 方法发生了闪退;

但是由于我找了台iphone 7 软件版本也是出bug的那个,不幸没能复现bug ,这就很尴尬了;

后来我仔细看了代码,发现可能是,我这个 NSDictionary 可能有了一个 null 的值,才导致的闪退了,我写了一段模拟代码,果不其然发生了闪退现象,所以我加了个安全保护;
下面展示一下我的 错误代码;

6. 修改前的代码
self.topBannerOperation=[manager GETAndShowExceptionIfErr:JavaCMSHomeQueryContent parameters:@{@"cityId":([STConfig GetInstance].localCity.CityId),@"positionId":NullNumber([OnlineConfigurationManager sharedManager].localConfigurationmodel.landingPage.home.topCarousel.positionId)} success:^(AFHTTPRequestOperation *operation, id responseObject, id Response) {
    
    if (responseObject[@"data"]!=nil&&[responseObject[@"data"] isKindOfClass:[NSDictionary class]]) {
        weakself.topBannerModel=[[Home2017CMSModel alloc]initWithDictionary:responseObject[@"data"] error:nil];
    }
    
    dispatch_group_leave(weakself.group);
    
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
    dispatch_group_leave(weakself.group);

7 .修改后的代码

修改后的代码 (加了个 NullString 用来返回一个非null 的字符串)

self.topBannerOperation=[manager GETAndShowExceptionIfErr:JavaCMSHomeQueryContent parameters:@{@"cityId":NullString([STConfig GetInstance].localCity.CityId),@"positionId":NullNumber([OnlineConfigurationManager sharedManager].localConfigurationmodel.landingPage.home.topCarousel.positionId)} success:^(AFHTTPRequestOperation *operation, id responseObject, id Response) {
    
    if (responseObject[@"data"]!=nil&&[responseObject[@"data"] isKindOfClass:[NSDictionary class]]) {
        weakself.topBannerModel=[[Home2017CMSModel alloc]initWithDictionary:responseObject[@"data"] error:nil];
    }
    
    dispatch_group_leave(weakself.group);
    
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
dispatch_group_leave(weakself.group);

提交修改,下个版本发布的时候,就不会出现闪退了,如果影响用户比较多,可以发临时更新;

谢谢你查看我的文章;如有不足可以指出,谢谢🙏;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,204评论 25 708
  • 前言 先说下友盟的SDK,现在真是对友盟没脾气了,分享不正常!三方登录不正常!崩溃分析也不好用!最近所在项目的Ap...
    翻炒吧蛋滚饭阅读 22,739评论 43 53
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • 什么是符号表? 符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示: <起始地址> <结束地址> ...
    深圳阳光阅读 12,246评论 28 5
  • 舒缓: 儿子起床没昨天早了。因为人的精神不可能时常处于饱满状态,需要有松弛,适度放松也是为了调整新的状态。儿子陪我...
    天蓝蓝47阅读 434评论 1 3