3

我正在尝试向应用程序添加一些崩溃日志记录,并且我signal设置了一个处理程序来捕获标准的“致命”信号。我可以在信号处理程序中实际/简单地收集哪些“原因”信息(如果有)以进行记录?

(我花了大约 2 个小时在谷歌上搜索东西,但我发现的大部分内容都是针对其他环境的,而且过于复杂而不可靠。我正在寻找简单易行的方法,特别是在 iOS 环境中。)

(我已经有一个 Objective-C 异常处理程序来捕获 Objective-C 异常。)

4

2 回答 2

3

请不要这样做。正如 Landon Fuller 在这里强调的那样,进行正确和安全的崩溃报告非常困难:http: //landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html

简而言之:您只能在应用程序崩溃时使用异步安全代码,因此默认情况下调用任何 Objective-C 方法都是不安全的!

而是使用现有的崩溃报告库,如 PLCrashReporter 或其他一些已经存在的库或服务:https ://code.google.com/p/plcrashreporter/

于 2013-01-14T21:18:08.847 回答
2

您可以通过以下方式获取堆栈跟踪:

+ (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;
}
于 2013-01-14T19:25:49.860 回答