收集崩溃信息
// 将系统提供的获取崩溃信息函数写在这个方法中,以保证在程序开始运行就具有获取崩溃信息的功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 将下面C函数的函数地址当做参数
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
// 设置一个C函数,用来接收崩溃信息
void UncaughtExceptionHandler(NSException *exception){
// 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。
NSArray *symbols = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
}
一、用atos命令来符号化某个特定模块加载地址
以下面的一行crash日志为例:
iOSApp 0x000bd89d 0x1a000 66983
命令行工具: atos -o executable -l loadAddress -arch architecture address
例子:atos -o appName -l 0x102920000 -arch arm64(armv7) 0x0000000100b0778c
// 将系统提供的获取崩溃信息函数写在这个方法中,以保证在程序开始运行就具有获取崩溃信息的功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 将下面C函数的函数地址当做参数
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
// 设置一个C函数,用来接收崩溃信息
void UncaughtExceptionHandler(NSException *exception){
// 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。
NSArray *symbols = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
}
一、用atos命令来符号化某个特定模块加载地址
以下面的一行crash日志为例:
iOSApp 0x000bd89d 0x1a000 66983
命令行工具: atos -o executable -l loadAddress -arch architecture address
例子:atos -o appName -l 0x102920000 -arch arm64(armv7) 0x0000000100b0778c
本文介绍如何在iOS应用中收集和解析崩溃信息。通过使用NSSetUncaughtExceptionHandler方法及atos命令,可以有效地捕获并解析应用崩溃时的堆栈信息。
2358

被折叠的 条评论
为什么被折叠?



