Каково различие между Отладкой и Выпуском в Visual Studio?

Неустранимая ошибка: [TraitA] и [TraitB] определяют одно и то же свойство ([$ x]) в композиции [ClassC]

Происходит, когда класс пытается use несколько Черты , где две или более из этих признаков имеют , определяют свойство с тем же именем и с свойством, имеющим разные начальные значения.

Пример:

Проблемное: хотя можно разрешить конфликты между конкурирующими методами , в настоящее время нет синтаксиса, который бы разрешил конфликт между двумя конкурирующими свойствами. Единственное решение в это время - refactor ; т.е. избежать конфликта между именами свойств, которые приводят к фатальной ошибке.


Вопросы, относящиеся:

106
задан Community 23 May 2017 в 12:34
поделиться

8 ответов

Самая важная вещь состоит в том, что в Режиме отладки нет никакой оптимизации, в то время как в режиме Release существует оптимизация. Это важно, потому что компилятор очень усовершенствован и может сделать некоторое довольно хитрое улучшение низкого уровня Вашего кода. В результате некоторые строки Вашего кода можно было бы оставить без любых инструкций вообще, или некоторые могли бы получить все перепутанные. Постепенная отладка была бы невозможна. Кроме того, локальные переменные часто оптимизируются таинственными способами, таким образом, Часы и QuickWatches часто не работают, потому что переменная "оптимизирована далеко". И существуют множества другой оптимизации также. Попытайтесь отладить оптимизированный код.NET когда-то, и Вы будете видеть.

Другое основное отличие - то, что из-за этого настройки Release по умолчанию не беспокоятся генерацией обширной отладочной информации. Это-.PDB файл, который Вы, возможно, заметили, и он позволяет отладчику выяснять, какие инструкции по сборке соответствуют который строка кода, и т.д.

107
ответ дан Vilx- 24 November 2019 в 03:51
поделиться

"Отладка" и "Выпуск" являются на самом деле всего двумя маркировками для целого, убил настроек, которые могут влиять на Вашу сборку и отладку.

В режиме "Debug" у Вас обычно есть следующее:

  • файлы Базы данных Отладки Программы, которые позволяют Вам следовать за осуществлением программы вполне тесно в источнике во время времени выполнения.
  • Вся выключенная оптимизация, то, которое позволяет Вам осматривать значение переменных и трассировки в функции, которые, возможно, иначе были оптимизированы далеко или встроили
  • А _DEBUG определение препроцессора, которое позволяет Вам писать код, который действует по-другому в режиме отладки, сравненном с выпуском, например, с инструментом, УТВЕРЖДАЕТ, что это должно только использоваться при отладке
  • Соединение с библиотеками, которые были также скомпилированы с параметрами отладки на, которые обычно не развертываются на фактических клиентах (по причинам размера, и безопасность)

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

49
ответ дан Joris Timmermans 24 November 2019 в 03:51
поделиться

Главным образом отладка включает большую дополнительную информацию, полезную при отладке. В режиме выпуска это все сокращено и продано за производительность.

8
ответ дан Rik 24 November 2019 в 03:51
поделиться

Если бы Вы проходите опции компиляции проекта и сравниваете их, Вы видели бы то, что является различиями.

Принятие вопроса о Собственном/C++ коде (это не совсем ясно из формулировки):

В основном, в Отладке вся оптимизация генерации кода выключена. Некоторые библиотеки (например, STL) значение по умолчанию к более строгой проверке ошибок (например, итераторы отладки). Больше отладочной информации сгенерировано (например, для "Редактирования, и Продолжите"). Больше вещей сгенерировано в коде для фиксации ошибок (набор значений локальной переменной к неинициализированному шаблону, "куча" отладки используется).

7
ответ дан NeARAZ 24 November 2019 в 03:51
поделиться

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

6
ответ дан annakata 24 November 2019 в 03:51
поделиться

Также обратите внимание, что при использовании MFC, например, отладьте ссылку проектов против нераспространяемых версий DLL как MFC90D.DLL, в то время как сборки конечных версий связываются против распространяемых версий как MFC90.DLL. Это является, вероятно, похожим с другими платформами.

Поэтому Вы, вероятно, не будете в состоянии запустить приложения отладочной сборки на машинах неразработки.

6
ответ дан foraidt 24 November 2019 в 03:51
поделиться

Заметным отличием, которое Вы видите, является размер двоичного файла. Отладочная сборка производит больший двоичный файл, чем Сборка конечных версий.

При компиляции в Отладке, таблица символов добавляется к скомпилированному объекту файла кода, который позволяет, чтобы отладка программ насладилась этими двоичными файлами и задницами значения объектов и переменных.

Другое заметное различие - то, что в режиме Release двоичный файл просто отказал бы на фатальной ошибке, в то время как в Режиме отладки, если Вы начинаете отлаживать приложение в Visual Studio, можно проверить стек вызовов, который говорит Вам точное местоположение ошибочного оператора.

3
ответ дан fasih.rana 24 November 2019 в 03:51
поделиться

Кроме того, очевидно, что режим отладки создает множество дополнительных потоков, помогающих с отладкой. Они остаются активными на протяжении всего процесса, независимо от того, подключаете ли вы отладчик или нет. См. Мой связанный с этим вопрос здесь .

6
ответ дан 24 November 2019 в 03:51
поделиться