2009-10-29 26 views
38

我有一些代碼會在一個特定的行上產生大量的ArgumentExceptions(這是在不同的開發人員的代碼中,所以我不能只是改變它),然後這些代碼會被正確捕獲和處理。我試圖調試ArgumentExceptions發生在不同的代碼段(然後被捕獲和處理,所以我不能只看看未處理的異常)ArgumentExceptions。Visual Studio調試 - 在一個地方忽略異常而在其他地方打破異常?

是否有某種方法可以忽略源自該特定其他代碼行的ArgumentExceptions,同時還會拋出其他地方拋出的ArgumentExceptions?

+0

http://support.microsoft.com/kb/308469 – madcolor 2009-10-29 16:05:33

回答

37

您可能可以這樣做,但這取決於您要調試的代碼相對於其他開發人員的代碼的位置以及您是否可以修改(但不提交更改)他的代碼。

,你會想要做的第一件事是,至少暫時,進入菜單工具 - >選項 - >調試在Visual Studio中,並勾選「僅我的代碼」複選框。我認爲即使在Express版本中也可以使用它,但它可能不是,如果它不適用於您,恐怕我不得不說的其餘部分可能無濟於事。

無論如何,一旦你有了這個勾號,你將不會再看到不是「你的」的代碼的甩尾通知。這意味着代碼不在你的程序集中。sln或從System.Diagnostics標記爲[DebuggerNonUserCode]屬性的代碼。我通常做的事是臨時裝飾有問題的方法[DebuggerNonUserCode],直到完成調試我需要調試的內容,然後在檢入到源控制之前還原這些更改。它不像我想要的那麼優雅(我很想在異常助手中再次從這個網站拋出異常「複選框),但它總比沒有好。

我相信可能有其他調試器設置可能會與「Just My Code」的工作方式相互作用,所以如果這不起作用,請讓我知道,我會嘗試更準確地瞭解我的設置看起來像當我這樣做。

+1

某些Express版本的Visual Studio中的「選項」對話框中沒有提供「只是我的代碼」選項(雖然它在Visual C#2010 Express中),但可以通過其他方式更改:[如何禁用'只是我的代碼'在Visual Basic 2005 Express?](http://stackoverflow.com/questions/12790806)*。 – 2012-10-09 00:29:51

+0

請注意,雖然此選項也適用於C++,但它不會影響異常,如下所述:http://msdn.microsoft.com/en-us/library/dn457346.aspx – pjcard 2014-01-31 15:29:22

+1

奇怪的是, DebuggerNonUserCode]仍然停止在父功能調試器:http://stackoverflow.com/questions/39382551 – crokusek 2016-09-08 23:54:41

2

如果您知道如何調用它,我會在代碼中設置斷點,然後從那裏進入(F11)。你也可以在程序員修正他們的代碼之前,讓他們感覺更好(除非你是和平主義者),也許他們在代碼中不會有太多的ArgumentExceptions(這可能會讓你感覺更好)即使你是和平主義者)。

+0

安東尼剛剛贏得了互聯網! 好吧... StackOverflow,不是互聯網。是的,好吧......也許只是因爲這是4年半前的一個誤導,但是......好吧......呃......哦,忘了它。只要接受勝利,繼續前進! – MarqueIV 2014-03-13 00:15:04

3

如果你正在談論「Break on Throw」例外功能,那麼沒有。它僅僅是一種基於類型的功能,並沒有任何方法來控制代碼的哪一部分引發異常。

最好的辦法是隻在所有引發拋出或暫時拋出您關心的地方的異常的行上放置斷點。

1

聽起來像使用異常作爲流量控制。如果您試圖調試的那個稍後在程序中發生,您可以稍後嘗試連接調試器,或者可以等到程序運行後在引發ArgumentException時打開中斷。

試着限制範圍 - 如果你感興趣的異常派生自但不完全是ArgumentException,那麼就打破這個。

告訴其他開發者修復他的代碼。

編輯:在.NET 4中,可以將處理器連接到AppDomain.FirstChanceException事件,過濾掉非ArgumentException的excepitons並篩選出基於調用堆棧上壞一個。

0

評論中的鏈接很棒。

我認爲條件斷點是你在這裏尋找的。您可以通過右鍵單擊斷點並單擊條件...菜單項來完成此操作。

+0

不幸的是Visual Studio調試器不如GDB;特別是你不能設置一個命令到異常來檢查一個條件,如果這是我們不想要的異常,繼續。 – 2014-10-23 10:26:30