我发现了Xcode的奇怪行为。 在此代码中,Xcode调试器不会中断未捕获的异常。如果finally块返回,Xcode调试器无法捕获异常
@try { @throw @"AA"; }
@catch (...) { @throw; }
@finally { return; }
但是这段代码中的异常被捕获并触发Xcode中断执行以进行调试。
@try { @throw @"AA"; }
@catch (...) { @throw; }
@finally { }
如果@finally
块return
小号调试器无法捕获该异常。你见过这个问题吗?我不确定这是一个真正的问题。从角度来看,它看起来像设计的行为。我不知道为什么。 @finally
块不应该return
吗?我的问题是它无声地吞噬异常,所以我无法检测到它。
对我感到羞耻,我不太清楚尝试......赶上......最后的行为。我几乎没有使用异常捕获代码。这是设计的行为还是错误行为?这是任何已知的问题?
这是我的环境。
- Xcode的版本4.4(4F250)
- OS X 10.7.4
编辑
附上全测试的源代码。
#import <Foundation/Foundation.h>
int main (int a, char** b)
{
@try
{
NSLog(@"trying something...");
@try { @throw @"AA"; }
@catch (...) { @throw; }
@finally { return 0; }
}
@catch (...)
{
NSLog(@"something catched.");
}
@finally
{
NSLog(@"finally...");
}
}
听起来像一个潜在的错误,是你正在编译的实际代码?无论如何,Cocoa/iOS **中的异常并不旨在用于可恢复错误**。当Cocoa/iOS抛出异常时,一般的行为是报告并崩溃。 – bbum 2012-08-11 15:20:26
这只是测试的临时代码,但它是我编译的实际代码。 – Eonil 2012-08-11 18:20:24