2010-07-30 58 views
2

我想做一些輕微的傻事。在我的一個對象的Dispose()方法中,我想打印一個對象的調試跟蹤,告訴我所有發生的事件。確定是否從異常處理程序(使用語句)調用的代碼?

但是,由於這需要時間和金錢,我只想要這樣做,如果Dispose()被調用,因爲拋出異常。

所以我想這樣做

if (exceptionIsCurrentlyRaised) PrintDebugStuff(); 

確實.NET有我可以查詢這樣的exceptionIsCurrentlyRaised財產?

+0

我懷疑你可以任意跟蹤發生在對象上的所有「事件」。如果你想跟蹤,只需將日誌記錄到每次調用方法時記錄所需日誌的對象中即可。 – 2010-07-30 00:22:16

+0

我自己記錄感興趣的事件,但這不是我問的問題。 – 2010-07-30 00:25:15

+1

[確定是否由於異常被拋出而在finally塊中執行]的可能重複(http://stackoverflow.com/questions/3301507/determine-if-executing-in-finally-block-due-to-exception-being-拋出) – 2010-07-30 00:54:11

回答

0

我不知道這樣的事情是否存在,因爲我從來沒有見過它。但是這聽起來像你可以創建一個具有單一布爾屬性的接口。然後,當你在catch語句中但在調用dispose方法之前,只需設置標誌即可。

我猜這不可能是這樣一個簡單的解決方案,但認爲我會得到一些想法開始。

編輯:好,我也發現了這個SO文章,有一個類似的問題:Determine if executing in finally block due to exception being thrown

0

有趣的問題,但我懷疑這是可能的 - 至少在沒有一些重大的黑客使用調試或仿形的API。

即使你能叫一些調試API,它可以給你訪問一個catch塊內的電流例外,我不認爲你可以得到一個finally塊內的異常(這是你的Dispose方法是執行)。屆時可能會處理異常,因此,就運行時而言,沒有例外。

我可以看到這樣做的唯一方法是註冊以通知所有異常,因爲您的對象已構建,並從那裏試圖找出異常是否被捕獲。這個答案可能會有所幫助:.NET - First chance exception listener for intensive debugging?

+1

如果例外是處理而不是重新生成,當'finally'塊運行時確實沒有例外。另一方面,一個常見的場景是,當一個異常被引發到一個外部的作用域時,finally塊會運行。如果finally塊試圖做事務回滾並且失敗,它應該拋出一個帶有掛起異常的rollback-failure異常作爲InnerException。不幸的是,有沒有乾淨的方式來做到這一點。 – supercat 2011-04-06 20:59:20

0

其實,這有點像Visual Studio 2010中的「智能跟蹤」功能,它可以記錄調試會話期間發生了什麼事,當你在一個斷點是

+0

一個很好的觀察。雖然可以在不使用VS的情況下使用intellitrace? – 2010-08-24 21:26:16

+0

我真的不知道。我還沒有進入它。 – 2010-08-24 23:13:48

相關問題