相关疑难解决方法(0)

NSSetUncaughtExceptionHandler无法捕获iPhone上的所有错误

我正在使用http://code.google.com/p/google-toolbox-for-mac中的 GTMStackTrace .

我需要一种方法来测试最终用户在应用程序崩溃时向我发送错误.我知道如何将数据发送到我的网站,但问题是如何捕获所有未处理的错误.

我有这个代码:

void exceptionHandler(NSException *exception) {
    NSLog(@"%@", [exception reason]);
    NSLog(@"%@", [exception userInfo]);
    NSLog(@"%@", GTMStackTraceFromException(exception));

    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:NSLocalizedString(@"Error unexpected",@"Info: Can't save record")
                          message:GTMStackTraceFromException(exception) delegate:nil 
                          cancelButtonTitle:NSLocalizedString(@"Ok",@"Button: Ok") otherButtonTitles:nil];
    [alert show];
    [alert release];    
}

int main(int argc, char *argv[]) {
    //For crash report..
    NSSetUncaughtExceptionHandler(&exceptionHandler);
    //Normal code...
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
Run Code Online (Sandbox Code Playgroud)

然而,事情不是抓了很多的错误,像一个坏的版本,一个BAD ACCES等,和App消失.我有2个问题,其中目前尚不清楚为什么happend和最终用户有没有什么要说的线索.

(例如,释放两次相同的var不能捕获)

那么,如何我得到的所有讨厌的错误,从而使最终用户简单的给我发一份崩溃报告吗?

iphone crash error-handling

9
推荐指数
1
解决办法
2万
查看次数

如何捕获EXC_BAD_ACCESS(代码= 1,地址= 0x00XXXXXX)?

我正在尝试记录我的应用中发生的所有崩溃.我写了一个signalHandler和一个exceptionHandler.我正在为sys/signal.h文件中定义的所有信号注册signalHandler.我在SIGABRT,SIGUSR1等上调用了signalHandler方法.

问题是,我有时会得到一些奇怪的信号,而不是调用我的signalHandler.一个例子是EXC_BAD_ACCESS(代码= 1或2,地址='某个存储器地址').我已经使用signalHandler注册了SIGSEGV; 实际上我已在sys/signal.h文件中注册了所有已定义的信号.

如果要创建此EXC_BAD_ACCESS(code = 1,address = 0x00XXXXXX)信号,只需在应用中编写以下代码行,

NSLog(@"Stupid Log %@ %@");
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我,抓住这样的信号吗?

提前致谢,

苏拉杰

iphone signals exception objective-c ios

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

iphone ×2

crash ×1

error-handling ×1

exception ×1

ios ×1

objective-c ×1

signals ×1