#if (DEBUG) и несоответствие источника / времени выполнения номера строки в log4net - PullRequest
5 голосов
/ 26 ноября 2011

Когда я использую директивы препроцессора, такие как

1 #if(DEBUG)
2 // 1
3 // 2
4 #else
5 // 1
6 // 2
7 #endif
8
9 logger.Debug("Log exception, etc."); 

, это приводит к тому, что во время выполнения номера строк в журнале (например, трассировка стека) неверны - в приведенном выше примере строка 9 станет 4, потому что остальныебудет проанализирован препроцессором.

Это делает анализ логов довольно сложным.

Есть ли способ решить эту проблему без создания методов с ConditionalAttribute?

Мне известно о Debugger.IsAttached (и я использую это решениесейчас), но я бы предпочел запускать код в зависимости от режима сборки (отладки / выпуска), а не от того, подключен ли отладчик.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Я снова проверил в совершенно отдельном проекте, и, как подсказывает Росс Паттерсон , трассировка исключений верна.

К сожалению, я уже провела рефакторинг своего (большого) проекта с помощью Debugger.IsAttached, и проблема исчезла, поэтому я (как ни странно) подозревал, что директивы препроцессора были проблемой.Возможно .pdb не были синхронизированы с двоичными файлами.

Поскольку я не могу воспроизвести проблему сейчас, я считаю, что она решена.Приятно знать, что этот сценарий поддерживается.Спасибо Росс Паттерсон !

0 голосов
/ 21 июля 2014

У меня та же проблема, но вместо директив препроцессора я видел, как это происходит с частичными классами.Хотите знать, являются ли неполные классы причиной проблемы.

...