跳到主要内容

异常分析

设置面包屑

研发人员可以在应用程序的任意位置调用「面包屑」接口进行埋点。当应用程序发生崩溃时,SDK 会按代码的触发顺序收集埋点信息并在崩溃轨迹中高亮显示,以协助研发人员在应用崩溃时了解代码调用逻辑。

  • 相关接口
/**
* @breadcrumb:自定义信息,最多包含100个字符,支持中文、英文、数字、下划线
*/
+(void)leaveBreadcrumb:(NSString *)breadcrumb;
  • 代码示例
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOption:(NSDictionary *)launchOptions
{
// 设置面包屑
[NBSAppAgent leaveBreadcrumb:@"didFinishLaunchingWithOptions"];
return YES;
}

自定义信息

在应用发生崩溃的时候,研发人员往往需要更多的信息以收集现场环境,可以通过调用「自定义信息」接口上传额外信息,协助分析崩溃问题,采集的自定义信息会在异常详情页「自定义信息」中展示。

  • 相关接口
/**
* 此函数可以在任何位置多次调用,最多可添加10条附加信息,每条附加信息最大支持100个字节,随崩溃上传。
*/
+(void)setCustomerData:(NSString*)data forKey:(NSString*)key;
  • 代码示例
- (void)doSomething
{
[NBSAppAgent setCustomerData:@"value" forKey:@"key"];
...
}

自定义错误

使用「自定义错误」接口可以采集研发人员「try / catch 异常」和「业务错误」并在基调听云平台「异常分析」→「错误」中进行展示,可以帮助研发人员收集异常和错误。

  • 相关接口
/**
* 参数说明:
* @message:不可以传空,最大长度1024字节,超出截取前1024字节
* @exception:上传exception取到抛出时的堆栈,不传只取到调用接口的堆栈,多线程下只取调用接口的线程的堆栈,堆栈最大深度为100
* @metaData:value值支持 NSNumber,NSString,NSArray,NSDictionary类型,最大128k,超出设置metadata为:"metaData":{"error":"metaData的大小大于 最大限制128K"}
*/
+ (void)reportError:(NSString *)message withMetaData:(NSDictionary *)metaData;
+ (void)reportError:(NSString *)message withException:(NSException *)exception withMetaData:(NSDictionary *)metaData;
  • 代码示例
- (void)doSomething
{
...
if(success){
...
}else{
NSDictionary *dict = @{@"k1":@"v1",@"K2":@"V2"};
[NBSAppAgent reportError:@"errorMsg" withMetaData:dict];
}
...
}
- (void)doSomething
{
@try {
// ... do something that might throw an exception ...
}
@catch (NSException *exception) {
// report the error
NSDictionary *dict = @{@"k1":@"v1",@"K2":@"V2"};
[NBSAppAgent reportError:@"errorMsg" withException:exception withMetaData:dict];
}
@finally {
}
...
}

设置崩溃类型采集

若无需采集某种 signal 类型的信号错误可调用此接口进行忽略,支持忽略单个类型和多个类型。

  • 相关接口
/**
* SDK支持采集的信号
* SIGABRT, //6
* SIGBUS, //10
* SIGFPE, //8
* SIGILL, //4
* SIGSEGV, //11
* SIGSYS, //12
* SIGTRAP, //5
* SIGKILL,//9
* @ignore 参数支持字符串、NSNumber、NSArray
*/
+ (void)ignoreSomeSignalCrash:(id)ignore;
  • 代码示例
int main(int argc, char * argv[]) {
@autoreleasepool {
// 初始化之前调用
[NBSAppAgent ignoreSomeSignalCrash:@"SIGABRT"];
[NBSAppAgent startWithAppID:@"appkey" location:YES];
...
}
}

设置异常回调

使用「异常回调」接口后可以在发生卡顿或上传崩溃数据时获取SDK采集的异常数据「崩溃、卡顿数据」。 注:需要在崩溃上传或发生卡顿前调用「SDK连服务器成功后就会上传崩溃数据」。

  • 相关接口
/**
* @brief 当发生crash或者卡顿时设置自定义回调
* @type 值为NBSCallBackOnCrash或NBSCallBackOnANR
*/
+ (void)setCallBack:(NBSCallBack)callback withType:(NBSCallBackType)type;
  • 代码示例
- (void)getExceptionInfo
{
// context 为SDK采集的崩溃或卡顿的上下文信息
[NBSAppAgent setCallBack:^(NSDictionary *context) {
...
} withType:NBSCallBackOnCrash];
}

设置越狱设备不收集崩溃、卡顿

调用该接口后,不再收集越狱设备下的崩溃、卡顿信息。

  • 相关接口
/**
* @brief 越狱设备不采集崩溃与卡顿数据,需在SDK start 之前调用
*/
+ (void)disableJailbreakExceptionDataCollection;
  • 代码示例
int main(int argc, char * argv[]) {
@autoreleasepool {
// 初始化之前调用
[NBSAppAgent disableJailbreakExceptionDataCollection];
[NBSAppAgent startWithAppID:@"appkey" location:YES];
...
}
}