在iOS中捕获崩溃和异常[重复]

Posted

技术标签:

【中文标题】在iOS中捕获崩溃和异常[重复]【英文标题】:Catch crashes and exceptions in iOS [duplicate] 【发布时间】:2013-04-22 04:05:51 【问题描述】:

我想要的是自己捕获所有崩溃和异常并添加其他信息(例如用户)来保存它。 现在,我的想法是将 try-catch 块包装在 didFinishLaunchingWithOptions 中。在 catch 块中,我记录异常和附加信息,然后重新抛出它。 这是实现它的正确方法吗? 提前致谢。

更新代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
@try 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    self.loginViewController = [[LoginViewController alloc] init];
    self.window.rootViewController = self.loginViewController;
    [self.window makeKeyAndVisible];

@catch (NSException *exception) 
    // Save the exception description and additional info here
    ...
    // And re-throw it.
    [exception raise];

    return YES;


进一步更新: 上面的代码我自己试过了,它无法捕捉到其他地方发生的异常。 我知道谷歌分析 ios SDK 有“sendUncaughtExceptions”属性来做类似的事情。 我认为如果我自己实现类似的功能可以提供更大的灵活性,因为我们有自己的错误服务器(我会将错误日志上传到我们的服务器)。 任何建议表示赞赏。

解决方案: 最后,我从这个博客中得到了一个解决方案: http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

【问题讨论】:

您要记录什么类型的“附加信息”? @Bhargavi:我想跟踪特定设备和用户信息(例如设备 ID、电子邮件等)。 @ShivanRaptor:我不是在问如何使用 try-catch 块。我想知道我是否将 try-catch 放入 didFinishLaunchingWithOptions 并将所有之前的行都包装进去,即使我在其他地方启动线程,它是否会捕获所有潜在的崩溃? 先向我们展示您的代码。 @ShivanRaptor,请看我上面的更新。 【参考方案1】:

您是否研究过 TestFlight API?它非常容易实现,免费,听起来它会完成你想要的。它具有内置的远程异常处理和远程日志记录(您只需像使用 NSLog 一样使用 TFLog)。您可以记录 UDID 并跟踪用户以进行测试版或企业分发,但请注意 Apple 不允许您在应用商店应用中收集 UDID,因此您必须在该版本中禁用它——您仍然会崩溃日志和其他指标,它们只是匿名的。

www.testflightapp.com

【讨论】:

以上是关于在iOS中捕获崩溃和异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

异常捕获拒绝闪退 让应用从容的崩溃UncaughtExceptionHandler

iOS未捕获的异常添加子视图崩溃

捕获多个异常-C# [重复]

python单元测试中的assertRaises没有捕获异常[重复]

拦截 C# 中的所有异常,即使它们已经被捕获 [重复]

我正面临一个错误,提示在 Xcode 中发现未捕获的异常(信号 SIGABRT)[重复]