2011-04-26 51 views
11

我是C#的新手,在編譯C#項目時遇到問題。這是關於在調試和發佈模式下調試日誌。 我希望在調試模式下調用日誌功能,但不能在發佈模式下調用,並考慮性能。 我知道在C/C++,這是很容易做到:如何在Debug和Release之間進行編譯?

// this is C/C++ sample, not C# 
#ifdef DEBUG 
#define DebugLog(CString,__VA_ARGS__) LogFunction(CString,__VA_ARGS__) 
#else 
#define DebugLog 
#endif 

在上述C/C++代碼,所述DEBUGLOG()被編譯和被稱爲在調試模式下,但不編譯或稱爲在Release模式,所以可以保證性能。

在C#中是否有與上面的C/C++代碼一樣的工作方式?

+0

也許你可以看看這個:http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx – 2011-04-26 04:08:19

回答

13

等價物是方法中的[條件]屬性。像這樣:

[Conditional("DEBUG")] 
public static void DebugLog(string fmt, params object[] args) { 
    // etc.. 
} 

在Release版本(DEBUG未定義)中,編譯器將刪除方法和對該方法的調用。在重新發明這個輪子之前,一定要查看.NET框架中的調試和跟蹤類,他們已經這樣做了。並且有很多靈活性來重定向調試/跟蹤信息。

+0

感謝你們所有人的回答。我認爲這是我想要的 - 即使沒有以調試模式編譯。 – 2011-04-27 06:18:25

+0

只有當方法的返回類型爲void時纔有效。所以你不能裝飾這樣的MVC動作。我最終使用'#if DEBUG' – 2015-01-22 18:15:07

14

在C#中,你可以做

#if DEBUG 
       //debug-mode only snippet go here. 
#endif 

這裏的reference documentation#if指令。

2

你可以在C#中做同樣的事情。在項目屬性中,您可以設置條件編譯符號,如DEBUG。事實上,我認爲Visual Studio會在創建項目時默認執行此操作 - 當項目處於調試模式時,它將添加一個DEBUG標誌,並在切換到發佈模式時刪除該標誌。這可以在Project Properties-> Build選項卡中進行配置。您也可以爲特定於平臺的代碼添加自己的標誌。 Pocket_PC標誌是在.NET Compact Framework上進行老式Windows Mobile開發的着名標誌。

有了這個,你可以添加預處理器指令,像這樣:

#if DEBUG 

// debug code here 

#endif 
0

其他方法,可以包括「有條件的」屬性像

[Conditional("DEBUG")] 
void DebugLog() 
{ 
    // method code here 
} 

更多信息,可以發現here in MSDN

+0

感謝所有你們的答案。我認爲這是我想要的 - 不是在Debug模式下編譯的。 – 2011-04-27 06:19:13

0
/// <summary>Function to Set Debug Flag to true if DEBUG is in Effect</summary> 
/// <param name="theDebugFlag">output - true if DEBUG, unchanged if RELEASE</param> 
[Conditional("DEBUG")] 
static void QueryDebugStatus(ref Boolean theDebugFlag) 
{ 
theDebugFlag = true; 
} 
相關問題