我正在尝试向应用程序添加一些崩溃日志记录,并且我signal
设置了一个处理程序来捕获标准的“致命”信号。我可以在信号处理程序中实际/简单地收集哪些“原因”信息(如果有)以进行记录?
(我花了大约 2 个小时在谷歌上搜索东西,但我发现的大部分内容都是针对其他环境的,而且过于复杂而不可靠。我正在寻找简单易行的方法,特别是在 iOS 环境中。)
(我已经有一个 Objective-C 异常处理程序来捕获 Objective-C 异常。)
我正在尝试向应用程序添加一些崩溃日志记录,并且我signal
设置了一个处理程序来捕获标准的“致命”信号。我可以在信号处理程序中实际/简单地收集哪些“原因”信息(如果有)以进行记录?
(我花了大约 2 个小时在谷歌上搜索东西,但我发现的大部分内容都是针对其他环境的,而且过于复杂而不可靠。我正在寻找简单易行的方法,特别是在 iOS 环境中。)
(我已经有一个 Objective-C 异常处理程序来捕获 Objective-C 异常。)
请不要这样做。正如 Landon Fuller 在这里强调的那样,进行正确和安全的崩溃报告非常困难:http: //landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html
简而言之:您只能在应用程序崩溃时使用异步安全代码,因此默认情况下调用任何 Objective-C 方法都是不安全的!
而是使用现有的崩溃报告库,如 PLCrashReporter 或其他一些已经存在的库或服务:https ://code.google.com/p/plcrashreporter/
您可以通过以下方式获取堆栈跟踪:
+ (NSArray *)backtrace {
void* callstack[128];
int frames = backtrace(callstack, 128);
char **strs = backtrace_symbols(callstack, frames);
int i;
NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];
for (i = 0; i < XXX; i++) {
[backtrace addObject:[NSString stringWithUTF8String:strs[i]]];
}
free(strs);
return backtrace;
}