System.Diagnostics.Debug.WriteLine в производственном коде
-
05-07-2019 - |
Вопрос
Я, наверное, уже должен это знать, но я не уверен, и я не вижу это задокументировано.
Я часто использую System.Diagnostics.Debug.WriteLine в процессе разработки, чтобы иметь возможность отслеживать изменения переменных или исключений при отладке кода. Это сделано для того, чтобы облегчить разработку и понимание того, что происходит, только во время разработки. Обычно я либо закомментирую код, либо удаляю его, когда иду в производство.
Мне интересно, что произойдет, если я забуду закомментировать код. Скажем, например, что во время цикла разработки я отслеживаю информацию об ошибках, которая может записывать строку соединения в окно вывода с помощью строки Debug.Write. Это, конечно, нормально при разработке, но мне интересно, когда я выйду в эфир, есть ли здесь риск. Может кто-нибудь прикрепить отладчик к моему живому исполняемому файлу и перехватить этот вывод? Или это то, что производит только вывод в Visual Studio? Р>
А как насчет того, когда мы переключаемся с отладки на релиз? Этот код игнорируется компилятором, если мы компилируем его для выпуска?
Решение
Все члены класса Debug помечены ConditionalAttribute , поэтому сайты вызовов не будут компилироваться в сборку Release.
Другие советы
System.Diagnostics.Debug
вызовы метода присутствуют только тогда, когда " DEBUG " условный символ компиляции определен. По умолчанию "DEBUG" Символ определен только для отладочных сборок.
Компиляторы, которые поддерживают
ConditionalAttribute
игнорирует вызовы эти методы, если только "DEBUG" является определяется как условная компиляция символ. р>
Поскольку все методы Debug имеют атрибут [Conditional (" DEBUG ")], при переключении с Debug на Release вам не придется беспокоиться об этом, поскольку вызовы этих методов будут удалены (вместе с с другими оптимизациями сборки выпуска).
Отладочная информация видна только когда вы работаете в режиме отладки . В режиме выпуска операторы Debug не будут видны (вы можете использовать Trace вместо Debug , если хотите, чтобы эти операторы были видны в режиме выпуска) . р>
Если вы компилируете без опции / d: DEBUG
или #define DEBUG
, ваши вызовы WriteLine физически не будут присутствовать в вашем коде выпуска; никакая третья сторона не может восстановить какую-либо информацию из этих вызовов, поскольку их буквально нет в версии выпуска.
Подробнее здесь: Класс отладки (System.Diagnostics) в MSDN
Почти все члены Debug помечены условным атрибутом. Такие компиляторы, как C #, будут пропускать вызовы этих методов во время сборки Release, так что вы в безопасности.
Информация о режиме здесь: http://msdn.microsoft.com/en-us/ библиотека / system.diagnostics.debug.aspx