我正在尝试处理崩溃,当崩溃发生时,我想将一些日志存储到一个文件中。
到现在为止,我尝试的是
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()方法
有谁能指出我做错了什么吗?或者同时处理异常和信号的任何建议。
发布于 2015-04-15 21:39:11
在开始自己处理信号之前,您可能需要阅读有关安全信号处理的知识。man sigaction是第一个开始。参见注释“以下函数是...异步信号安全的”。
例如,在信号处理程序中,您不能使用Objective-C或NSLog。这可能是您的信号处理程序不能按预期工作的原因。
和低级的东西一样,Mike Ash has a nice article。
发布于 2015-04-15 21:39:01
在AppDelegate.m中编写以下方法
//Function to Caught Exceptions
- (void)installUncaughtExceptionHandler
{
InstallUncaughtExceptionHandler();
}并在AppDelegate.m的applicationDidFinishLaunching方法中这样调用上述方法
[self performSelector:@selector(installUncaughtExceptionHandler) withObject:nil afterDelay:0];https://stackoverflow.com/questions/29651586
复制相似问题