2015-04-15 54 views
4

将Xcode从6.0升级到6.3之后,我注意到我的自动化测试开始失败。@ try/@ catch没有发现异常

2015-04-14 18:56:50.625 xctest[48304:517820] *** Terminating app due to uncaught exception 'foo', reason: 'bar' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0084a746 __exceptionPreprocess + 182 
    1 libobjc.A.dylib      0x004d3a97 objc_exception_throw + 44 
    2 CoreFoundation      0x0084a66d +[NSException raise:format:] + 141 
    3 TestTests       0x03e6dbdc -[TestTest test] + 810 
    4 CoreFoundation      0x0072b84d __invoking___ + 29 
    5 CoreFoundation      0x0072b6f8 -[NSInvocation invoke] + 360 
    6 XCTest        0x20108975 -[XCTestCase invokeTest] + 320 
    7 XCTest        0x20108baa -[XCTestCase performTest:] + 175 
    8 XCTest        0x20114122 -[XCTest run] + 314 
    9 XCTest        0x20107598 -[XCTestSuite performTest:] + 406 
    10 XCTest        0x20114122 -[XCTest run] + 314 
    11 XCTest        0x20107598 -[XCTestSuite performTest:] + 406 
    12 XCTest        0x20114122 -[XCTest run] + 314 
    13 XCTest        0x20107598 -[XCTestSuite performTest:] + 406 
    14 XCTest        0x20114122 -[XCTest run] + 314 
    15 XCTest        0x20103df2 __25-[XCTestDriver _runSuite]_block_invoke + 61 
    16 XCTest        0x20110c42 -[XCTestObservationCenter _observeTestExecutionForBlock:] + 184 
    17 XCTest        0x20103d16 -[XCTestDriver _runSuite] + 285 
    18 XCTest        0x20104961 -[XCTestDriver _checkForTestManager] + 272 
    19 XCTest        0x20104c79 -[XCTestDriver runTestSuite:completionHandler:] + 376 
    20 XCTest        0x2011772c +[XCTestProbe runTests:] + 216 
    21 libobjc.A.dylib      0x004e967e +[NSObject performSelector:withObject:] + 70 
    22 xctest        0x0000823a xctest + 4666 
    23 xctest        0x000084b0 xctest + 5296 
    24 xctest        0x00008591 xctest + 5521 
    25 xctest        0x00007e3d xctest + 3645 
    26 libdyld.dylib      0x019d4ac9 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

经过进一步调查后,似乎异常现在是无法捕捉的。这两个片段都会导致这个错误。

XCTAssertThrows([NSException raise:@"foo" format:@"bar"]); 

@try { 
    [NSException raise:@"foo" format:@"bar"]; 
} 
@catch (NSException *ex) { 
    NSLog(@"caught"); 
} 

一个VCS力清除同步后,重建一切似乎都很正常,但后来同样的失败在几个构造时间的开始。有没有人有任何想法?

+0

你并不孤单。但它也不影响每个人。查看[开发人员论坛中的此线程](https://devforums.apple.com/thread/267548?tstart=0)以获取更多信息。 –

+0

在论坛上的信息强烈建议它与http://stackoverflow.com/q/21150223/476716 – OrangeDog

+0

有关我不认为沉默的警告将解决这个问题,虽然。 –

回答

5

继开发者论坛之后,这似乎是开发人员工具中的一个错误或疏忽,它引入了与使用旧版工具构建的二进制文件不兼容的问题。

应该在Xcode 6.4中修复

+2

我有同样的问题。但是我想在@ try-catch的代码中捕获一个NSAssert,但它不起作用。我使用Xcode 6.4(6E35b)。任何解决方案? – Buju

+0

看到与6E35b相同的问题。事实证明,我有ldflags -Wl,-no_compact_unwind'集合,这打破了异常处理。 – jtbandes