如何处理objective-c中的坏访问信号处理

如何处理objective-c中的坏访问信号处理,objective-c,macos,exception,signal-handling,Objective C,Macos,Exception,Signal Handling,我正在尝试处理崩溃,当崩溃发生时,我想将一些日志存储到一个文件中 到目前为止,我所尝试的是 void InstallUncaughtExceptionHandler() { NSSetUncaughtExceptionHandler(&HandleException); signal(SIGABRT, SignalHandler); signal(SIGILL, SignalHandler); signal(SIGSEGV, SignalHandler);

我正在尝试处理崩溃,当崩溃发生时,我想将一些日志存储到一个文件中

到目前为止,我所尝试的是

void InstallUncaughtExceptionHandler()
{
    NSSetUncaughtExceptionHandler(&HandleException);
    signal(SIGABRT, SignalHandler);
    signal(SIGILL, SignalHandler);
    signal(SIGSEGV, SignalHandler);
    signal(SIGFPE, SignalHandler);
    signal(SIGBUS, SignalHandler);
    signal(SIGPIPE, SignalHandler);
}
static void SignalHandler (int signo) {
    //...
    NSLog(@"\n Inside Signal Handler Method...");
}
void HandleException(NSException *exception) {
    NSLog(@"CRASH: %@", exception);
    NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
    // Internal error reporting
}
因此,当我得到一个坏的访问异常时,控件没有进入信号处理程序方法

我正在AppDelegate的ApplicationIDFinishLaunching方法中调用此InstallUncaughtExceptionHandler方法


谁能告诉我我做错了什么?或者任何处理异常和信号的建议。

在AppDelegate.m中编写以下方法

//Function to Caught Exceptions
- (void)installUncaughtExceptionHandler
{
    InstallUncaughtExceptionHandler();
}
并在AppDelegate.m的ApplicationIDFinishLaunching方法中以这种方式调用上述方法

//Function to Caught Exceptions
- (void)installUncaughtExceptionHandler
{
    InstallUncaughtExceptionHandler();
}

在开始自己处理信号之前,您可能需要阅读安全信号处理。人的行动是第一个开始。请参阅注释,以下函数是[…]异步信号安全的

例如,在信号处理程序中,不能使用Objective-C或NSLog。这可能是信号处理程序无法按预期工作的原因


与低级别内容一样,.

请解释以这种延迟方式安装异常处理程序的意义。@NikolaiRuhe请再次查看代码,因为在我将0传递给参数时,它不会延迟安装异常处理程序。它只调用在另一个线程上安装的方法。问题是关于不受线程影响的信号处理。