Вопрос

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

Я часто использую 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 , если хотите, чтобы эти операторы были видны в режиме выпуска) .

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top