簡體   English   中英

發布版本中的Debug.WriteLine

[英]Debug.WriteLine in release build

有沒有辦法在發布版本中使用Debug.WriteLine而不定義DEBUG

不,但您可以通過定義TRACE並使用Trace.WriteLine.來使用Trace in release Trace.WriteLine. 看看這里:

https://support.microsoft.com/en-us/help/815788/how-to-trace-and-debug-in-visual-c

否。如果未定義DEBUG預處理程序符號,則由於應用了[Conditional("DEBUG")]屬性,編譯器將刪除對Debug.*任何調用。

您可能想要考慮Trace.WriteLine或其他日志記錄技術。

雖然你仍然需要定義DEBUG - 你不必在程序集范圍內進行。 您只能在所需的源文件中定義它。 因此,如果您希望從特定類進行調試日志記錄,則可以僅為該源文件定義DEBUG。

#define DEBUG
using System.Diagnostics;

...

class Logger
{
    void Log( string msg ){ Debug.WriteLine( msg ); }
}

是。 您可以使用表達式樹,如上面的注釋中所述,使用TRACE,或者不定義任何編譯時常量。

        var p = Expression.Parameter(typeof(string), "text");
        var callExp =
            Expression.Call(
              typeof(System.Diagnostics.Debug).GetRuntimeMethod(
                   "WriteLine", new [] { typeof(string) }),
              p);
        Action<string> compiledAction = Expression.Lambda<Action<string>>(
                                         callExp, p)
                                         .Compile();

在此之后,您可以通過調用隨時調用Debug.WriteLine

        compiledAction("Debug text");

您實際上是通過不進行靜態方法調用來欺騙編譯器,而是在運行時動態構造它。

由於沒有性能影響,因此編譯並重新使用該操作。

這就是我在SharpLog中編寫DebugLogger的方法。

如果您感興趣,可以在這里查看源代碼: https//github.com/prasannavl/SharpLog/blob/master/SharpLog/DebugLogger.cs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM