码迷,mamicode.com
首页 > 其他好文 > 详细

07-崩溃日志分析工具

时间:2015-04-30 17:31:30      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:


http://bughd.com/doc/index


 

BugHD 用户使用手册

一.登录/注册

如果你已经有 FIR.im 的账号,可以使用 FIR.im 的账号直接登录

技术分享

技术分享

二.创建一个项目

  1. 在项目列表,点击“创建项目”
  2. 输入项目名称,选项项目的应用类型
  3. 获取到 general_key,用于配置 SDK。

技术分享

三.集成SDK

iOS 应用 SDK 集成

Android 应用 SDK 集成

四.搜集崩溃信息

有崩溃信息后,可根据应用的版本、崩溃问题的修复状态以及崩溃的发生时间来筛选崩溃问题。

技术分享

五.查看崩溃详情

可查看崩溃问题的堆栈信息、设备分布、操作系统分布及其他更详细的设备信息。

技术分享

技术分享

技术分享


iOS 快速配置

注意:

  • SDK 最低兼容 iOS 6.0;
  • BugHD 的 SDK 请勿与其他崩溃分析的 SDK 同时使用,同样的接口注册将会覆盖。

 

General Key

General Key 用来唯一标识您的应用,为防止别人滥用,请勿泄露,建立每个项目时将自动生成项目对应的 General Key,可在项目列表页查看每个项目对应的 General Key 值

 

导入 SDK

方法一:下载并导入 SDK

将下载包中的 FIR.framework 文件夹拖到 Xcode 项目中

在应用的设置中,  Build Phases -> Link Binary With Libraries 里添加SystemConfiguration.framework


方法二:通过 CocoaPods 添加

1.在你项目的 Podfile 中添加以下代码:

pod ‘FIR.im‘, ‘~> 1.2.0‘

2.执行 pod 安装命令

$ pod install

 

调用 SDK

在修改 AppDelegate.m 中:

#import <FIR/FIR.h> //导入头文件

然后在 application:didFinishLaunchingWithOptions: 方法中加入一行:

[FIR handleCrashWithKey:@"YOUR_GENERAL_KEY"]; 

 


iOS 检测版本更新

确认 SDK 配置成功以后,可通过一行代码实现自动检测新版本的功能

检测 FIR.im 的新版本

didFinishLaunchingWithOptions方法中加入以下代码可实现基于 FIR.im 的检测更新;也可根据实际需求将代码加到其他函数中,以实现其他情况下的点击按钮检测更新或自动检测更新

[FIR checkForUpdateInFIR:^(id result, NSError *error) {
    // do something
} token:@"YOUR_TOKEN"]

注意事项:

  • 要将 token 替换为 FIR.im 的用户 token
  • 该方法不适用于上线 App Store 的应用

iOS 自定义参数

SDK 快速配置完成后,可以通过调用以下方法获取应用崩溃时的自定义参数信息

添加自定义参数

调用该方法后,程序所有崩溃后,都会上传自定义参数到 BugHD;可以添加多个参数。

/* 添加自定义参数
@param value NSString型value
@param key   NSString型key
@Discussion 自定义参数,每次crash发送
*/
+(void)setCustomizeValue:(NSString *)value forKey:(NSString *)key;

使用方法:

[FIR setCustomizeValue:@"value1" forKey:@"key1"];
[FIR setCustomizeValue:@"value2" forKey:@"key2"];

根据 key 删除参数

/* 根据key删除参数
@param key   NSString型key
*/
+(void)removeCustomizeValueForKey:(NSString *)key;

使用方法:

[FIR removeCustomizeValueForKey:@"key1"];

清空自定义参数

/* 清空自定义参数
*/
+(void)removeCustomizeValue;

使用方法:

[FIR removeCustomizeValue];

 

如何获取 iOS 符号表

第一步:打开 Xcode,选择"Window——>Organizer"

技术分享

第二步:选择对应版本的 ipa 包,"右键——>Show in Finder"

技术分享


 

第三步:选择对应版本的".xcarchive"文件,"右键——>显示包内容"

技术分享

第四步:选择 dSYMs 文件夹下的".dSYM"文件,"右键——>显示包内容"

技术分享

第五步:Contents/Resources/DWARF 文件夹下的文件即为要上传的符号表

技术分享

 

常见问题

BugHD 上报哪些崩溃消息?

iOS 应用apple c++ 代码导致的 crash
Android 应用 Java 代码导致的 Crash、NDK C/C++ 开发导致的 Crash

如何获取 General Key?

在“我的项目”中新建一个项目,在项目设置中即可看到 General Key.

崩溃是立即上报吗?

发生崩溃会立即上报,如果上报不成功将会在在第二次启动时上报。

为什么异常没有上报?

  1. General Key 是否设置正确
  2. 初始化 SDK 是否在 Crash 之前完成
  3. 网络是否可用
  4. 前面有上报突然不上报了?如果一直是同一种崩溃,BugHD 不会生成两个崩溃问题,只会累计同一崩溃问题的崩溃次数,请换一种异常再次尝试!

不配置还原符号表会影响异常上报吗?会有什么影响?

不会影响异常上报!但是解析的时候就无法找到对应的方法和错误行了,所以为了更快的找到问题,请上传每个版本对应的符号表

每个版本都要配置符号表吗?

需 要!一个版本,需要对应一份符号表(Java 的 Mapping 文件及 SO 的 Symbol 文件,applec++ 的 dsym 文件),配置只对设置的版本有效,重复配置将会覆盖,如果个别版本没有配置符号表,我们将使用最新上传的符号表解读,为了确保信息的准确性,建议每个版本 单独上传符号表。

BugHD 会反复上报同样的问题么?

不会的,为了提高崩溃的修复效率,同样的问题我们只生成一个,但是崩溃次数多的问题在排序时会排在前面,提醒你很多用户因这个问题导致崩溃,请尽快解决。

iOS问题

BugHD(iOS) 能捕获哪些异常

BugHD 通过注册 NSUnCaughtExceptionHandler 监听未被 try catch 的 Objective C(简称 OC)代码异常。 BugHD 通过注册 SIGABRT/SIGBUS/SIGFPE/SIGILL/SIGSEGV/SIGTRAP 几个 unix 信号,监听 C 代码引发的系统异常信号。

能捕获卡死的 crash 吗

不能。 越狱扩展包会从系统的 crashlog 中查找并上报这类的 crash。

能捕获 Lowmemory 导致的 crash 吗

不能。

本地调试无法使用

在本地调试的时候,如果使用 xcode 启动应用,gdb/lldb 会拦截到信号并停止应用运行,BugHD 就无法获取信号并处理,所以不能使用 xcode 启动(NSException 可以点击断点继续执行,可以使用 xcode 启动调试)。

Crash 堆栈不可读

BugHD 上报的崩溃堆栈是应用部分只有地址信息的,需要配置符号表才能对上报的崩溃进行符号化,或者可以开启进程内还原。

什么是符号表

iOS 的应用编译的时候生产的 dSYM 文件,一般在 build 目录下,名称为 *.app.dSYM 的一个目录。 BugHD 会对这个符号表文件进行解析,取出有用的信息,得到一个较小的新符号表用于上传。

进程内还原结果不对

如果应用的设置里面 STRIP 选项是 ALL Symbols,那么还原是会出现错误的,不能开启进程内还原

上报堆栈中系统模块会部分还原失败

较新的系统版本在进程内调用符号转换函数(dladdr)的时候会得到一个的结果,并不能得到正确的系统函数。 BugHD 在后台还会进行一次还原,如果 BugHD 后台有对应该系统的符号表,你会看到正确的结果。

上报堆栈中某些系统版本分会还原失败

BugHD 在符号表系统堆栈的时候,需要对应系统版本的库,有很多小版本 iOS 的 build 需要从设备上导出,只有收集到该系统的符号表才能进行还原。

Andorid 问题

Java 的崩溃是什么?

Java 运行时没有被 Try Catched 住的 Throwable,抛到 JVM 导致 JVM 退出的过程就是 Java 的 Crash。

什么是 Java 的还原符号文件?

产品在发布时一般会使用 Progurad 工具对代码进行混淆,提高安全性,在使用 Progurad 工具进行代码混淆时会可以生成一个 mapping 文件,称为 Java 的还原符号文件。

为什么要上传 Java 还原符号文件?

产品发布的安装包,一般代码经过混淆,导致上报的异常堆栈中的类名和方法名是一种不可读的方式(例如a.b()),BugHD 需要通过 Java 还原符号表还原回真实的可读的类名和方法名(例如:MyClass.myMehtod())。

kill -9、exit 等会被当成 Crash 上报吗?

不会

try catch 的异常会被当成 Crash上报吗?

不会

App 无响应异常(ANR)能否捕获?

不行

 

07-崩溃日志分析工具

标签:

原文地址:http://www.cnblogs.com/iyuanxiaojun/p/4469178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!