2009-07-11 2 views
6

Обычно я тестирую свой код локально на своем рабочем компьютере, а затем перемещаю его в среду разработки, а затем, наконец, в производственную среду. Каков наилучший способ использования режима отладки/выпуска для этого сценария? Мне нужно только заботиться о режиме отладки в моей машине? Должен ли я публиковать режим отладки или режим выпуска для разработки? Я знаю, наверное, я должен опубликовать, используя режим выпуска для производства. Я на самом деле не обращал внимания на все это, поэтому я постоянно работаю только в режиме отладки, и я знаю, что не должен.Как использовать режим отладки/выпуска в Visual Studio?

Редактировать: Спасибо за ответы. Похоже, что неплохо использовать режим отладки только на моей машине. Несмотря на то, что он находится в машине разработки, он в основном освобождает публику (сотрудников, qa), поэтому он должен быть в режиме деблокирования. И, конечно же, это должен быть режим выпуска при выпуске на prod.

ответ

12

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

В обычный день вы должны развиваться в режиме отладки. Большинство языков вставляют дополнительные проверки в приложение режима отладки. Эти пятна больше ошибок, но, как правило, замедляют приложение.

Тем не менее, вы также должны выполнить сильное тестирование режима выпуска как часть процесса разработки. На самом деле клиенты будут видеть версию версии вашего режима Release, и для ошибок может быть определен режим отладки/выпуска. Проверки ошибок, вставленные в режим отладки, могут привести к побочным эффектам, которые скрывают реальные ошибки в вашем приложении.

+0

@ JaredPar «Проверки ошибок, вставленные в режим отладки, могут создавать побочные эффекты, которые скрывают настоящие ошибки в вашем приложении». -Ты можешь уточнить? – TGnat

+3

@TGnat, есть очевидные случаи, когда проверки изменяют глобальное состояние (зло, но существуют). Более тонким является то, что простой запуск проверки изменяет время вашего приложения. Я видел много проблем с потоками, когда дорогие проверки режима отладки скрывали основные проблемы синхронизации, заставляя один поток занимать больше времени в режиме DEBUG, чем в режиме RELEASE. Это позволило другим потокам достичь завершенного состояния и создать внешний вид рабочего приложения. Как только проверка была удалена в режиме RELEASE, поток бежал быстрее и отображал состояние гонки. – JaredPar

3

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

Если вы разрабатываете приложения ASP.NET, оставляя режим Debug на самом деле, измените, как/когда ваши страницы компилируются компилятором JIT и значительно ухудшают производительность, чтобы добавить лучшую возможность интерактивной отладки.

Что касается сборки для развертывания в разработке ... если вы используете модульные тесты против разработки, вероятно, неплохо было бы развернуть сборку Debug, чтобы вы могли получить самую отладочную информацию при сбоях тестов или исключениях , Тем не менее, есть, надеюсь, дополнительная среда тестирования или предварительного производства, в которой вы можете проводить ваши интеграционные тесты, и там проводятся ручные тесты. Эта среда тестирования/Pre-Prod должна ОПРЕДЕЛЕННО использовать выпускные сборки, чтобы вы могли увидеть истинные проблемы с производительностью и компиляцией перед тем, как перейти к Production.

Если у вас нет этого промежуточного уровня Testing/Pre-Prod, я бы предложил запустить среду Dev с Release. Другими словами, перед выпуском конфигурации Release вы должны запустить хотя бы один уровень.

Для получения дополнительной информации о том, что вы можете делать с конфигурациями, у меня есть сообщение в блоге специально для Silverlight (http://blog.tonyheupel.com/2009/04/environment-specific-service-references.html). В нем есть ссылка на более общую статью Скотта Гензельмана о конфигурациях сборки и различных средах.

2

По умолчанию сборка релиза будет скомпилирована с использованием более оптимизационных переключателей, что приведет к более быстрому и меньшему коду, который, как правило, вы хотите освободить для клиентов (отсюда и название). T

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

Обратите внимание, что вы можете создавать сборки релизов с помощью отладочных символов, для отладчика становится сложнее сопоставлять текущую инструкцию в машинный код с соответствующей строкой источника.

6

Я следовать этому подходу:

  • кода/отладки цикл на моей рабочей станции: DEBUG
  • выполнения модульных тестов на моей рабочей станции: DEBUG
  • профилирование на моей рабочей станции: RELEASE
  • ночи строить и автоматические испытания: RELEASE (выполняет автоматическую установку)
  • практическое тестирование командой QA: RELEASE

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