【问题标题】:@try fails to catch EXC_I386_GPFLT?@try 无法捕获 EXC_I386_GPFLT?
【发布时间】:2015-01-11 20:55:57
【问题描述】:

我有一个简单的 NSLogv 包装器。它工作正常,除非在格式字符串中有太多占位符时抛出异常。我想捕捉那个异常,但是这个 @try 块不起作用。为什么?

- (void)error:(NSString *)formatString, ...;
{
    @try {
        va_list arglist;
        va_start(arglist, formatString);
        formatString = [NSString stringWithFormat:@"ERROR: %@", formatString];
        NSLogv(formatString, arglist);
        va_end(arglist);
    }
    @catch (NSException *exception) {
       // Handle exception ...
    }
}   

下面是一个抛出异常的例子:

[[MYLogger error:@"%@ %@", value];

【问题讨论】:

  • 为什么要捕获异常?您希望它崩溃,因为它是一个程序员错误。查找并修复开发和测试中的问题。
  • @try 在 Objective-C 中应该只用于在发生异常时“优雅地失败”。它不能像 Java 异常那样随意使用。
  • 捕获这个异常是最后一道防线;我不希望应用程序因为占位符数量错误的错误日志语句而崩溃。
  • @PhilMitchell 这就是测试的目的。此外,您可能应该编译出用于分发构建的日志。
  • @rmaddy 感谢您的意见。 NSLogv 确实不会在生产环境中被调用,但远程记录器会。

标签: ios objective-c exception nslog


【解决方案1】:

@try 捕获异常。您正在尝试捕捉信号。

我的建议:不要尝试。

【讨论】:

  • 有同样的问题。硬件设备没有问题,但在模拟器上测试时出现此问题。有更新吗?
猜你喜欢
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多