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

System.Diagnostics.Debug.WriteLine в производственном коде

Я, наверное, должен это знать уже, но я не уверен, и я не вижу его документированного.

Я часто использую System.Diagnostics.Debug.WriteLine во время процесса разработки, чтобы отслеживать изменения переменных или исключений, когда я отлаживаю код. Это предназначено для разработки и понимания того, что происходит быстрее только во время разработки. Я обычно либо комментирую код, либо удаляю его, когда я иду на производство.

Мне интересно, что произойдет, если я забуду прокомментировать код. Скажем, например, что во время цикла разработки я отслеживаю информацию об ошибках, которая может регистрировать привязку подключения к выходному окну с помощью Debug.Write Line. Очевидно, что это нормально, но я думаю, если я буду жить, если есть риск здесь. Может ли кто-то подключить отладчик к моему исполняемому исполняемому файлу и уловить этот вывод? Или это то, что только производит вывод в Visual Studio?

А как насчет перехода с отладки на выпуск? Означает ли этот код компилятор при компиляции для выпуска?

4b9b3361

Ответ 1

Все члены класса Debug помечены ConditionalAttribute, поэтому сайты вызовов не будут скомпилированы в сборку Release.

Ответ 2

System.Diagnostics.Debug вызовы метода присутствуют только тогда, когда определен условный символ компиляции "DEBUG" . По умолчанию символ "DEBUG" определяется только для отладочных сборников.

Составители, которые поддерживают ConditionalAttribute игнорировать вызовы эти методы, если только "DEBUG" определяется как условная компиляция символ.

Ответ 3

Поскольку у всех методов Debug есть атрибут [Условный ( "DEBUG" )], если вы переключитесь с Debug на Release, вам не придется беспокоиться об этом, так как вызовы этих методов будут удалены (вместе с другие оптимизации сборки Release).

Ответ 4

Отладочная информация отображается только при работе в режиме Отладка. В режиме освобождения никакие операторы отладки не будут видны (вы можете использовать Трассировка вместо Отладка, если вы хотите, чтобы эти операторы были видны в режиме выпуска).

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

Ответ 5

Предоставляя вам компиляцию без опции /d:DEBUG или #define DEBUG, ваши вызовы WriteLine физически не будут присутствовать в вашем коде выпуска; нет никакой возможности для какой-либо третьей стороны восстановить какую-либо информацию из этих вызовов, поскольку они буквально не присутствуют в выпуске.

Подробнее здесь: Класс отладки (System.Diagnostics) в MSDN

Ответ 6

Почти все члены Debug отмечены ConditionalAttribute. Такие компиляторы, как С#, будут пропускать вызовы этих методов во время сборки Release, поэтому вы находитесь в безопасности.

Информация о режиме работы здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.aspx