2010-07-02 160 views
6

分散在我正在開發的一個軟件項目中,有許多代碼是爲了調試和實用目的而編寫的。在我編譯我的代碼之前,我想要一種方法來選擇這些代碼塊是否應該包含到我的編譯中(這不需要導航代碼註釋)。我怎樣才能做到這一點?如何從編譯中輕鬆排除某些代碼行?

我在C#編程和使用Microsoft Visual Studio 2010

回答

13

流行[Conditional("DEBUG")]到您只想在調試版本中執行的方法上。有關更多詳細信息,請參閱here

+1

+1。 IMVHO,這是最乾淨的方式。 – womp 2010-07-02 17:16:57

+0

我並不熟悉這個條件調試屬性,非常漂亮。 – CrimsonX 2010-07-02 17:35:04

+0

相同 - 沒有聽說過這個。太好了! – RQDQ 2010-07-02 20:23:06

7

,當你想在你的編譯塊我會建議封閉在#ifdef SOMETHING#endif你的塊,然後定義在您的項目設置SOMETHING

7

您需要預處理器指令或條件編譯語句。你可以閱讀關於他們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,因此他們可以啓用調試代碼,並通過更改頂部的一行來重新刪除它。

+7

如果您在Visual Studio中使用構建配置,則Debug構建配置(默認情況下)會定義DEBUG,而Release構建配置則不會。無需手動定義它們。 – Toby 2010-07-02 17:03:30

1

如果他們是進行調試,那麼唯一可以接受的解決方案是圍繞這樣的代碼:

#ifdef DEBUG 

#endif 

這可確保當您編譯代碼包含在調試模式下,但在發佈模式下排除。

+1

當然還有其他可以接受的解決方案。條件屬性做同樣的事情,並且(對我來說)至少比指令更好,因爲根據我的經驗,指令往往會混淆第三方代碼分析工具。 – womp 2010-07-02 17:11:05

1

您可能需要考慮將這些調試功能完全移出類 - 讓您的類在「調試」和「發佈」模式之間「更改形狀」可能非常令人頭痛,並且可能難以診斷問題。

您可以考慮創建一個包含所有調試幫助程序的獨立「調試」程序集 - 然後確保您可以從解決方案中排除它,並在沒有它的情況下成功構建。

3

考慮使用the Debug class來有條件地記錄,斷言等。這有很多優點。您可以選擇在運行時記錄(或不記錄)。他們限制你(主要)不改變行爲的行爲,解決@ STW(有效)關注的一些問題。他們允許使用第三方日誌工具。

相關問題