以前討論過有關重新拋出異常的正確方法。相反,這個問題是關於如何在使用rethrow時從Visual Studio中獲得有用的行爲。C#重新拋出異常:如何在IDE中獲取異常堆棧?
考慮以下代碼:
static void foo() {
throw new Exception("boo!");
}
static void Main(string[] args) {
try {
foo();
} catch (Exception x) {
// do some stuff
throw;
}
}
散發出來具有正確的堆棧跟蹤,顯示FOO()作爲該異常的源的異常。 但是,GUI調用堆棧窗口只顯示Main,而我期待它顯示異常的調用堆棧,直到foo。
當沒有重新拋出時,我可以使用GUI非常快速地導航調用堆棧,以查看哪個調用導致異常以及我們如何到達那裏。
隨着rethrow我想能夠做同樣的事情。相反,GUI顯示的調用堆棧對我沒有用處。我必須將異常詳細信息複製到剪貼板,將其粘貼到記事本,然後手動導航到我感興趣的調用堆棧的任何功能。
順便說一句,如果我添加[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
或者如果我將捕獲量更改爲catch (Exception)
。
我的問題是:鑑於我使用的代碼重新拋出,有人可以建議一種方便的方式來導航與異常相關聯的調用堆棧嗎?我使用Visual Studio 2010中
爲什麼要重新拋出異常?在這裏沒有包含`catch`子句中的更多代碼嗎?否則,我認爲你的解決方案是簡單地沒有發現異常。 – 2010-12-04 01:14:50
羅伯特,這是一個最小的片段來說明問題。實際的代碼在重新推出之前做了一些工作。 – redtuna 2010-12-04 01:19:14