Отлаживать.WriteLine в сборке выпуска


есть ли способ, чтобы использовать Debug.WriteLine в сборке выпуска без определения DEBUG?

4 51

4 ответа:

нет, но вы можете использовать Trace в релизе определение TRACE и с помощью Trace.WriteLine. посмотреть здесь:

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

нет. Если вы не определяете DEBUG символ препроцессора, любые звонки Debug.* будет удален компилятором из-за [Conditional("DEBUG")] атрибут применяется.

вы можете рассмотреть Trace.WriteLine или другие методы ведения журнала, хотя.

хотя вам все еще нужно определить DEBUG - вам не нужно делать это в сборке. Вы можете определить его только в исходных файлах, которые вы хотите. Поэтому, если вы хотите вести журнал отладки из определенного класса, вы можете определить DEBUG только для этого исходного файла.

#define DEBUG
using System.Diagnostics;

...

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

да. Вы можете, как упоминалось в приведенных выше комментариях, использовать трассировку или без определения каких-либо констант времени компиляции, используя деревья выражений.

        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();

после этого можно вызвать отладку.WriteLine в любое время, позвонив

        compiledAction("Debug text");

вы по существу обманываете компилятор, не имея вызова статического метода, но вместо этого динамически строите его во время выполнения.

нет производительности-хит с тех пор, действие компилируется и повторно используется.

вот как я написал отладчик в SharpLog.

вы можете взглянуть на исходный код здесь, если он вас интересует:https://github.com/prasannavl/SharpLog/blob/master/SharpLog/DebugLogger.cs