分散在我正在開發的一個軟件項目中,有許多代碼是爲了調試和實用目的而編寫的。在我編譯我的代碼之前,我想要一種方法來選擇這些代碼塊是否應該包含到我的編譯中(這不需要導航代碼註釋)。我怎樣才能做到這一點?如何從編譯中輕鬆排除某些代碼行?
我在C#編程和使用Microsoft Visual Studio 2010
分散在我正在開發的一個軟件項目中,有許多代碼是爲了調試和實用目的而編寫的。在我編譯我的代碼之前,我想要一種方法來選擇這些代碼塊是否應該包含到我的編譯中(這不需要導航代碼註釋)。我怎樣才能做到這一點?如何從編譯中輕鬆排除某些代碼行?
我在C#編程和使用Microsoft Visual Studio 2010
流行[Conditional("DEBUG")]
到您只想在調試版本中執行的方法上。有關更多詳細信息,請參閱here。
,當你想在你的編譯塊我會建議封閉在#ifdef SOMETHING
和#endif
你的塊,然後定義在您的項目設置SOMETHING
。
您需要預處理器指令或條件編譯語句。你可以閱讀關於他們here。
從該鏈接的一個例子:
#define TEST
using System;
public class MyClass
{
public static void Main()
{
#if (TEST)
Console.WriteLine("TEST is defined");
#else
Console.WriteLine("TEST is not defined");
#endif
}
}
的代碼,如果測試是在代碼的頂部限定僅編譯。許多開發人員使用#define DEBUG,因此他們可以啓用調試代碼,並通過更改頂部的一行來重新刪除它。
如果您在Visual Studio中使用構建配置,則Debug構建配置(默認情況下)會定義DEBUG,而Release構建配置則不會。無需手動定義它們。 – Toby 2010-07-02 17:03:30
您可以使用preprocessor directives W/#if
如果他們是進行調試,那麼唯一可以接受的解決方案是圍繞這樣的代碼:
#ifdef DEBUG
#endif
這可確保當您編譯代碼包含在調試模式下,但在發佈模式下排除。
當然還有其他可以接受的解決方案。條件屬性做同樣的事情,並且(對我來說)至少比指令更好,因爲根據我的經驗,指令往往會混淆第三方代碼分析工具。 – womp 2010-07-02 17:11:05
您可能需要考慮將這些調試功能完全移出類 - 讓您的類在「調試」和「發佈」模式之間「更改形狀」可能非常令人頭痛,並且可能難以診斷問題。
您可以考慮創建一個包含所有調試幫助程序的獨立「調試」程序集 - 然後確保您可以從解決方案中排除它,並在沒有它的情況下成功構建。
考慮使用the Debug class來有條件地記錄,斷言等。這有很多優點。您可以選擇在運行時記錄(或不記錄)。他們限制你(主要)不改變行爲的行爲,解決@ STW(有效)關注的一些問題。他們允許使用第三方日誌工具。
+1。 IMVHO,這是最乾淨的方式。 – womp 2010-07-02 17:16:57
我並不熟悉這個條件調試屬性,非常漂亮。 – CrimsonX 2010-07-02 17:35:04
相同 - 沒有聽說過這個。太好了! – RQDQ 2010-07-02 20:23:06