Debug.WriteLine из сборки журнала в режиме выпуска не записывает в отладочный вывод в Visual Studio - PullRequest
4 голосов
/ 13 февраля 2012

Моя библиотека журналов имеет простой DebugLogger, который выглядит следующим образом:

public class DebugLogger : Logger
{
    protected override void PerformLogging(string entry)
    {
        Debug.WriteLine(entry);
    }
}

Библиотека журналов была построена в режиме RELEASE.

Приложение, которое ссылается на журналированиебиблиотека разрабатывается в режиме DEBUG, естественно.

Проблема заключается в том, что когда приложение, использующее библиотеку журналов, вызывает DebugLogger.PerformLogging("some debug message"), в выводе отладочной информации Visual Studio ничего не появляется.

Я убедился, что все работает нормально, когда сборка журналов выполняется.встроенный в режиме DEBUG.

Я ожидал, что входная сборка, находящаяся в режиме DEBUG, будет иметь приоритет, но похоже, что это не тот случай.

Есть ли что-нибудьчто можно сделать?

edit

http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx в разделе замечаний говорит о том, что компилятор игнорирует методы Debug без определения DEBUG.

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

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

#define DEBUG
using System.Diagnostics;

...

class Logger
{
    void Log( string msg ){ Debug.WriteLine( msg ); }
}
2 голосов
/ 13 февраля 2012

Способ обработки вызова Debug.WriteLine определяется при компиляции проекта, содержащего этот вызов.В этом случае компилятор C # видит вызов Debug.WriteLine в проекте Release (DEBUG не определен) и, следовательно, не передает вызов в результирующий IL.На этом этапе метод PerformLogging не имеет ссылки на Debug.WriteLine и, следовательно, ни один вызов из сборки любого типа не выполнит вызов Debug.WriteLine.

1 голос
/ 13 февраля 2012

С http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx

В проектах Visual Studio C # и Visual Basic по умолчанию «DEBUG» символ условной компиляции определен для отладочных сборок, а Символ «TRACE» определен для сборок отладки и выпуска.

Я создал TraceLogger, который использует Trace.Writeline и, похоже, делает свое дело для меня.

Я все еще открыт для предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...