什么原因信息可以很容易地在iOS信号处理程序中收集?
我试图添加一些崩溃日志到一个应用程序,我有一个signal
处理程序设置捕捉标准的“致命”的信号。 什么“原因”的信息(如果有的话),我几乎可以/简单地收集信号处理程序进行logging?
(我花了大约2个小时在Google上search,但是我发现的大部分内容都是针对其他环境的,而且太复杂了,不可靠。我正在寻找简单的方法,特别是在iOS环境中)。
(我已经有一个Objective-Cexception处理程序来捕获Objective-Cexception。)
请不要这样做。 这是非常难以做出适当和安全的崩溃报告,Landon Fuller在这里强调: http : //landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html
简而言之:应用程序崩溃时,您只能使用asynchronous安全代码,因此在默认情况下调用任何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; }