Система.Диагностика.Отлаживать.WriteLine в производственном коде


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

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

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

а насчет когда мы переключаемся с отладки на выпуск? Этот код игнорируется компилятором, если мы компилируем для выпуска?

6 58

6 ответов:

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

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

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

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

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

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

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

подробности здесь: Класс Отладки (System.Диагностика) на MSDN

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

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