我正在尋找.NET(2.0,特別是C#)源代碼的方式來觸發調試中斷,就好像在此時設置了斷點一樣,而不必記住在調試器中設置特定斷點並且不會干擾生產運行時。.NET源代碼可以硬編碼一個調試斷點嗎?
我們的代碼需要在生產中吞下異常,所以我們不會中斷連接到我們的客戶端應用程序,但我正在設置它,以便在出現這種錯誤時會彈出來進行分析在調試器中運行,否則將被安全忽略。
我嘗試使用Debug.Assert(false)
已經不太理想,我假設Debug.Fail()
的行爲方式是一樣的。它在理論上應該在生產中沒有任何作用,並且在調試時它會成功停止,但是通過設計,如果你想忽略那個錯誤,就沒有辦法繼續執行,就像你可以用一個實際的斷點,就像它會在我們吞下錯誤的生產中一樣。它顯然也打破了對變量狀態的評估,因爲調試器在本地系統代碼中實際停止運行,而在我們的系統代碼中停止運行,所以它的調試幫助是有限的。 (也許我錯過了一些回到事物的方式來看待變量等發生的地方???)
我希望有像Debug.Break()
,但它似乎並不存在(除非可能在更高版本的.NET中),並且其他任何Debug
方法都不適用。
更新:儘管ctacke的回答是我所尋找的最佳匹配,但我也從Debug.Assert()中發現了一個技巧 - 在調試器中運行時 - 暫停調試器,轉到Debug.Assert調用掛起的代碼(以綠色突出顯示,因爲它在框架代碼中處於關閉狀態),並按下Step-Out(shift-F11),然後在斷言對話框中單擊Ignore。這將使得調試器在斷言返回時暫停(並且能夠繼續執行,因爲它沒有發生,因爲它被忽略)。可能還有其他方法可以做同樣的事情(難道直接嘗試更直接嗎?),但這種方式很直觀。
你也可以使用#if DEBUG ... #endif代替 – 2008-12-12 02:52:56
當然,但它比條件式更醜陋,因爲你必須用預編譯器指令來包裝每個調用方法。 – ctacke 2008-12-12 04:24:17
澄清,從MSDN:`當標記爲有條件的方法被調用時,指定的預處理符號的存在或不存在決定是否包含或省略調用。如果定義了符號,則包含呼叫;否則,該調用被省略.`以及`條件方法必須是類或結構聲明中的方法,並且必須具有void類型的返回類型。' – Kiruse 2017-07-18 20:50:30