http://bughd.com/doc/index
如果你已经有 FIR.im 的账号,可以使用 FIR.im 的账号直接登录
有崩溃信息后,可根据应用的版本、崩溃问题的修复状态以及崩溃的发生时间来筛选崩溃问题。
可查看崩溃问题的堆栈信息、设备分布、操作系统分布及其他更详细的设备信息。
注意:
General Key 用来唯一标识您的应用,为防止别人滥用,请勿泄露,建立每个项目时将自动生成项目对应的 General Key,可在项目列表页查看每个项目对应的 General Key 值
方法一:下载并导入 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
在修改 AppDelegate.m 中:
#import <FIR/FIR.h> //导入头文件
然后在 application:didFinishLaunchingWithOptions: 方法中加入一行:
[FIR handleCrashWithKey:@"YOUR_GENERAL_KEY"];
确认 SDK 配置成功以后,可通过一行代码实现自动检测新版本的功能
在didFinishLaunchingWithOptions
方法中加入以下代码可实现基于 FIR.im 的检测更新;也可根据实际需求将代码加到其他函数中,以实现其他情况下的点击按钮检测更新或自动检测更新
[FIR checkForUpdateInFIR:^(id result, NSError *error) {
// do something
} token:@"YOUR_TOKEN"]
注意事项:
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删除参数
@param key NSString型key
*/
+(void)removeCustomizeValueForKey:(NSString *)key;
[FIR removeCustomizeValueForKey:@"key1"];
/* 清空自定义参数
*/
+(void)removeCustomizeValue;
[FIR removeCustomizeValue];
iOS 应用apple c++ 代码导致的 crash
Android 应用 Java 代码导致的 Crash、NDK C/C++ 开发导致的 Crash
在“我的项目”中新建一个项目,在项目设置中即可看到 General Key.
发生崩溃会立即上报,如果上报不成功将会在在第二次启动时上报。
不会影响异常上报!但是解析的时候就无法找到对应的方法和错误行了,所以为了更快的找到问题,请上传每个版本对应的符号表
需 要!一个版本,需要对应一份符号表(Java 的 Mapping 文件及 SO 的 Symbol 文件,applec++ 的 dsym 文件),配置只对设置的版本有效,重复配置将会覆盖,如果个别版本没有配置符号表,我们将使用最新上传的符号表解读,为了确保信息的准确性,建议每个版本 单独上传符号表。
不会的,为了提高崩溃的修复效率,同样的问题我们只生成一个,但是崩溃次数多的问题在排序时会排在前面,提醒你很多用户因这个问题导致崩溃,请尽快解决。
BugHD 通过注册 NSUnCaughtExceptionHandler 监听未被 try catch 的 Objective C(简称 OC)代码异常。 BugHD 通过注册 SIGABRT/SIGBUS/SIGFPE/SIGILL/SIGSEGV/SIGTRAP 几个 unix 信号,监听 C 代码引发的系统异常信号。
不能。 越狱扩展包会从系统的 crashlog 中查找并上报这类的 crash。
不能。
在本地调试的时候,如果使用 xcode 启动应用,gdb/lldb 会拦截到信号并停止应用运行,BugHD 就无法获取信号并处理,所以不能使用 xcode 启动(NSException 可以点击断点继续执行,可以使用 xcode 启动调试)。
BugHD 上报的崩溃堆栈是应用部分只有地址信息的,需要配置符号表才能对上报的崩溃进行符号化,或者可以开启进程内还原。
iOS 的应用编译的时候生产的 dSYM 文件,一般在 build 目录下,名称为 *.app.dSYM 的一个目录。 BugHD 会对这个符号表文件进行解析,取出有用的信息,得到一个较小的新符号表用于上传。
如果应用的设置里面 STRIP 选项是 ALL Symbols,那么还原是会出现错误的,不能开启进程内还原
较新的系统版本在进程内调用符号转换函数(dladdr)的时候会得到一个的结果,并不能得到正确的系统函数。 BugHD 在后台还会进行一次还原,如果 BugHD 后台有对应该系统的符号表,你会看到正确的结果。
BugHD 在符号表系统堆栈的时候,需要对应系统版本的库,有很多小版本 iOS 的 build 需要从设备上导出,只有收集到该系统的符号表才能进行还原。
Java 运行时没有被 Try Catched 住的 Throwable,抛到 JVM 导致 JVM 退出的过程就是 Java 的 Crash。
产品在发布时一般会使用 Progurad 工具对代码进行混淆,提高安全性,在使用 Progurad 工具进行代码混淆时会可以生成一个 mapping 文件,称为 Java 的还原符号文件。
产品发布的安装包,一般代码经过混淆,导致上报的异常堆栈中的类名和方法名是一种不可读的方式(例如a.b()),BugHD 需要通过 Java 还原符号表还原回真实的可读的类名和方法名(例如:MyClass.myMehtod())。
不会
不会
不行