Должен ли я видеть выходные данные отладки в окне вывода Visual Studio при запуске в конфигурации выпуска? - PullRequest
0 голосов
/ 03 июня 2018

Мне интересно, должен ли я что-либо видеть в моих выходных данных отладки при работе в режиме выпуска?

На рисунке ниже показан снимок экрана с моим выходным окном, когда я работаю в конфигурации выпуска.enter image description here

Просмотр отладочной информации заставляет меня думать, что я на самом деле не запускаю компиляцию релиза. Могу ли я быть уверен, что я определенно запускаю режим релиза?

1 Ответ

0 голосов
/ 03 июня 2018

Короткий ответ

Похоже, что это Trace сообщения , а не Debug сообщения , поэтому они появляются даже в сборках выпуска.

Длинный ответ

Давайте посмотрим, что происходит, исследуя различные контекстуальные значения термина «Отладка» здесь.

Конфигурация сборки «Отладка»

Во-первых, естьконтекст раскрывающегося списка с параметрами «Отладка» и «Выпуск» в Visual Studio.Эти параметры конфигурации сборки .Чтобы понять значение этого параметра, дважды щелкните узел «Свойства» для своего проекта и перейдите на страницу «Сборка».

The

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

В именах «Отладка» и «Выпуск» нет ничего особенного.это просто конфигурации по умолчанию, с настройками по умолчанию для этих сценариев.Вы можете изменить настройки для конфигурации.Вы также можете определить свои собственные конфигурации сборки, но это выходит за рамки этого ответа.Наконец, эти параметры также параметризуются аналогичной целевой платформой (например, «AnyCPU», «x86» и т. Д.), Но для этого ответа я предполагаю, что все сборки используют одинаковые настройки платформы.

Символ условной компиляции «DEBUG»

C # имеет условную компиляцию - возможность компилировать различные фрагменты кода в зависимости от символов, которые либо определены, либо не определены во время компиляции.Например, эта константа имеет значение «A», если определено MY_SYMBOL_NAME, или «B» в противном случае.

        public const string MyConst =
#if MY_SYMBOL_NAME
      "A";
#else
      "B";
#endif

Три верхних параметра на странице «Build» проекта управляют этими символами.В частности, это «Определить константу DEBUG» и «Определить константу TRACE», которые действительно относятся к символам компиляции.При их проверке выбранный параметр сборки компилируется с определенными символами DEBUG и TRACE соответственно.

По умолчанию конфигурации «Debug» и «Release» определяют TRACE, но только подходящим образом »«Отладка» определяет DEBUG.

Условная компиляция Debug Class

распространяется исключительно на члены классов System.Diagnostics.Debug и System.Diagnostics.Trace: вызовы методов этих классов будуткомпилируется только тогда, когда соответствующий символ определен.Так вот:

Debug.WriteLine("!");

трактуется так:

#if DEBUG
    Debug.WriteLine("!");
#endif

Эти методы пишут так называемым «слушателям трассировки», которые можно настроить либо в коде, либо вфайлы конфигурации приложения .

Так что если текст, который вы видите, написан с помощью вызовов Trace, то вы все равно увидите его, даже в конфигурации Release.Конечно, это означает, что это ведение журнала будет сохраняться в поставляемых версиях, если вы явно не отключите параметр «Определить константу TRACE».

Начать отладку и запустить без отладки

Так почему Visual Studio показываетэто все равно?Потому что есть одно больше значения «Отладка»: запускаете ли вы приложение с подключенным отладчиком Visual Studio или нет.Оба варианта запуска перечислены в строке меню отладки VS: «Начать отладку» и «Начать без отладки».Это ортогонально используемой конфигурации сборки: вы можете запустить сборку Debug без подключенного отладчика, и вы можете запустить сборку Release с подключенным отладчиком (хотя это может быть не так полезно, потому что в некоторых точках останова могут не быть достигнутыслучаи).

При использовании отладчика в окне «Вывод» отображаются сообщения, записанные в прослушиватель трассировки по умолчанию.Это помечено как «Отладка», но оно включает в себя все, что там написано, включая вызовы Trace, которые включены (по умолчанию) в сборки Release.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...