我發現了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