什么原因信息可以在iOS信号处理程序中随时收集?

什么原因信息可以在iOS信号处理程序中随时收集?,ios,signals,error-logging,Ios,Signals,Error Logging,我正在尝试向一个应用程序添加一些崩溃日志,我设置了一个信号处理程序来捕获标准的“致命”信号。我可以实际/简单地在信号处理程序中收集哪些“原因”信息(如果有)用于日志记录 (我花了大约2个小时在谷歌上搜索东西,但我发现的大部分内容都是针对其他环境的,太复杂了,不可靠。我在寻找简单的方法,特别是在iOS环境中。) (我已经有了一个Objective-C异常处理程序来捕获Objective-C异常。)您可以通过以下方法获取堆栈跟踪: + (NSArray *)backtrace { void*

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

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


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

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

+ (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;
}
+(NSArray*)回溯{
void*callstack[128];
int frames=backtrace(调用堆栈,128);
char**strs=回溯_符号(调用堆栈、帧);
int i;
NSMutableArray*回溯=[NSMutableArray阵列容量:帧];
对于(i=0;i
请不要这样做。正如Landon Fuller在这里强调的那样,进行正确和安全的碰撞报告是非常困难的:

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


而是使用现有的崩溃报告库,如PLCrashReporter或其他已经存在的库或服务:

据我所知,信号处理程序不能保证与
raise
在同一线程中运行。是的,在一个示例中,它转储了错误的线程。但这是一个好的开始。如果你把事情搞砸了,最糟糕的情况是什么?链接文章在“首先,不要伤害”一节下面陈述了其中的一些问题,比如“这可能会使进程死锁并导致挂起,导致无法报告崩溃。在病态情况下,这可能会导致用户数据的损坏。”我怎么强调都不过分:如果你不是这方面的专家,就不要自己做这件事。