Происходит, когда класс пытается use
несколько Черты , где две или более из этих признаков имеют , определяют свойство с тем же именем и с свойством, имеющим разные начальные значения.
Пример:
Проблемное: хотя можно разрешить конфликты между конкурирующими методами , в настоящее время нет синтаксиса, который бы разрешил конфликт между двумя конкурирующими свойствами. Единственное решение в это время - refactor ; т.е. избежать конфликта между именами свойств, которые приводят к фатальной ошибке.
Вопросы, относящиеся:
Самая важная вещь состоит в том, что в Режиме отладки нет никакой оптимизации, в то время как в режиме Release существует оптимизация. Это важно, потому что компилятор очень усовершенствован и может сделать некоторое довольно хитрое улучшение низкого уровня Вашего кода. В результате некоторые строки Вашего кода можно было бы оставить без любых инструкций вообще, или некоторые могли бы получить все перепутанные. Постепенная отладка была бы невозможна. Кроме того, локальные переменные часто оптимизируются таинственными способами, таким образом, Часы и QuickWatches часто не работают, потому что переменная "оптимизирована далеко". И существуют множества другой оптимизации также. Попытайтесь отладить оптимизированный код.NET когда-то, и Вы будете видеть.
Другое основное отличие - то, что из-за этого настройки Release по умолчанию не беспокоятся генерацией обширной отладочной информации. Это-.PDB файл, который Вы, возможно, заметили, и он позволяет отладчику выяснять, какие инструкции по сборке соответствуют который строка кода, и т.д.
"Отладка" и "Выпуск" являются на самом деле всего двумя маркировками для целого, убил настроек, которые могут влиять на Вашу сборку и отладку.
В режиме "Debug" у Вас обычно есть следующее:
В оптимизации режима "Release" включены (хотя существует несколько доступных опций), и _DEBUG определение препроцессора не определяется. Обычно Вы будете все еще хотеть генерировать файлы PDB, хотя, потому что очень полезно быть в состоянии "отладить" в режиме выпуска, когда вещи работают быстрее.
Главным образом отладка включает большую дополнительную информацию, полезную при отладке. В режиме выпуска это все сокращено и продано за производительность.
Если бы Вы проходите опции компиляции проекта и сравниваете их, Вы видели бы то, что является различиями.
Принятие вопроса о Собственном/C++ коде (это не совсем ясно из формулировки):
В основном, в Отладке вся оптимизация генерации кода выключена. Некоторые библиотеки (например, STL) значение по умолчанию к более строгой проверке ошибок (например, итераторы отладки). Больше отладочной информации сгенерировано (например, для "Редактирования, и Продолжите"). Больше вещей сгенерировано в коде для фиксации ошибок (набор значений локальной переменной к неинициализированному шаблону, "куча" отладки используется).
Вероятно, стоит упомянуть очень очевидное, та сборка, флаги допускают различную логику, которая должна использоваться только для изменения входа, и "консольный" обмен сообщениями, но может быть злоупотребленным и существенно изменить не только низкие уровни, но и фактическую бизнес-логику.
Также обратите внимание, что при использовании MFC, например, отладьте ссылку проектов против нераспространяемых версий DLL как MFC90D.DLL
, в то время как сборки конечных версий связываются против распространяемых версий как MFC90.DLL
. Это является, вероятно, похожим с другими платформами.
Поэтому Вы, вероятно, не будете в состоянии запустить приложения отладочной сборки на машинах неразработки.
Заметным отличием, которое Вы видите, является размер двоичного файла. Отладочная сборка производит больший двоичный файл, чем Сборка конечных версий.
При компиляции в Отладке, таблица символов добавляется к скомпилированному объекту файла кода, который позволяет, чтобы отладка программ насладилась этими двоичными файлами и задницами значения объектов и переменных.
Другое заметное различие - то, что в режиме Release двоичный файл просто отказал бы на фатальной ошибке, в то время как в Режиме отладки, если Вы начинаете отлаживать приложение в Visual Studio, можно проверить стек вызовов, который говорит Вам точное местоположение ошибочного оператора.
Кроме того, очевидно, что режим отладки создает множество дополнительных потоков, помогающих с отладкой. Они остаются активными на протяжении всего процесса, независимо от того, подключаете ли вы отладчик или нет. См. Мой связанный с этим вопрос здесь .