Подтвердить что ты не робот

Debug.WriteLine в выпуске

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

4b9b3361

Ответ 1

Нет, но вы можете использовать Trace в выпуске, указав Trace и используя Trace.WriteLine.. Посмотрите здесь:

http://support.microsoft.com/kb/815788

Ответ 2

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

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

Ответ 3

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

#define DEBUG
using System.Diagnostics;

...

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

Ответ 4

Да. Вы можете, как упоминалось в приведенных выше комментариях, использовать 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");

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

С момента выхода из строя не произошло никакого действия, действие скомпилировано и повторно использовано.

Вот как я написал DebugLogger в SharpLog.

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