【问题标题】:How can I intercept fatal exceptions?如何拦截致命异常?
【发布时间】:2014-07-19 00:14:39
【问题描述】:

我想在我的 iPad 应用程序中集成一种方法来监控用户活动,尤其是发生并触发应用程序停止的异常情况,类似于 Apple 的错误报告,但针对移动客户端。

我试图在@try@catch 块之间封装主要操作(main.m),但是直到那里才抛出异常,我只是不能在我的代码中到处添加这样的块。没有调用委托方法applicationWillTerminate,应用程序只是在没有任何通知的情况下被粗暴地停止。

对此有什么想法吗?

【问题讨论】:

  • link> 提出的解决方案解决了我的情况。在指示的响应中,只有 Approach1Approach2 对我有用。不明白为什么上面的例子和我试过的类似的例子不起作用,它应该与未处理的异常处理程序相同。

标签: ios ipad exception-handling


【解决方案1】:

它在main.m 中对我有用

int main(int argc, char *argv[]) {
    @autoreleasepool { 
        int retVal = 0;
        @try {
            retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
        @catch (NSException *exception) {
            NSLog(@"Exception: %@", exception);
            [exception raise];
        }

        return retVal;    
    }
}

附言

另一个棘手的方法:EXC_BAD_ACCESS automatic handling

还有NSUncaughtExceptionHandler的例子

【讨论】:

  • 想象以下场景:将“nil”添加到可变数组中或尝试访问数组中的非现有索引。这不是很不寻常的情况,可能是控制器或元素在某种情况下它是无效的并且不存在,因此抛出的异常不会被应用程序捕获,即使使用 NSError 代替 NSException 也是如此。应用程序将在没有任何通知的情况下停止。
  • 你说得对,完全忘了NSSetUncaughtExceptionHandler
  • 总比没有更好的解决方案。
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 2011-05-13
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多