首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在objective-c中处理BAD_ACCESS信号

如何在objective-c中处理BAD_ACCESS信号
EN

Stack Overflow用户
提问于 2015-04-15 21:28:33
回答 2查看 1.2K关注 0票数 1

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

到现在为止,我尝试的是

代码语言:javascript
复制
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
}

因此,当我得到一个BAD_ACCESS异常时,控件不会进入信号处理程序方法。

我在AppDelegate的applicationDidFinishLaunching方法中调用此InstallUncaughtExceptionHandler()方法

有谁能指出我做错了什么吗?或者同时处理异常和信号的任何建议。

EN

回答 2

Stack Overflow用户

发布于 2015-04-15 21:39:11

在开始自己处理信号之前,您可能需要阅读有关安全信号处理的知识。man sigaction是第一个开始。参见注释“以下函数是...异步信号安全的”。

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

和低级的东西一样,Mike Ash has a nice article

票数 0
EN

Stack Overflow用户

发布于 2015-04-15 21:39:01

在AppDelegate.m中编写以下方法

代码语言:javascript
复制
//Function to Caught Exceptions
- (void)installUncaughtExceptionHandler
{
    InstallUncaughtExceptionHandler();
}

并在AppDelegate.mapplicationDidFinishLaunching方法中这样调用上述方法

代码语言:javascript
复制
[self performSelector:@selector(installUncaughtExceptionHandler) withObject:nil afterDelay:0];
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29651586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档