вторник, 18 июня 2013 г.

Visual Studio: Чем отличается конфигурация Debug от Release

Начинающим программистам всегда интересно, чем отличается конфигурация Debug от Release.


Привожу свой ответ на этот вопрос.

Главное различие состоит в назначении: конфигурация Debug предназначена для компиляции на этапе разработки и отладки программы, а Release - для сборки программы и последующего её использования пользователями программы.

Поэтому:
  • В конфигурации Release удаляется отладочная информация из исполняемого файла. Это приводит к уменьшению размера исполняемого файла (обычно в несколько раз).
  • Исключаются дополнительные проверки. Например, инициализированы переменные или нет:
    #include <iostream>
    int main()
    {
        int x;
        std::cout << x << std::endl;
        return 0;
    }


    Из приведёного рисунка видно, что в конфигурации Release никаких проверок не осуществляется, а в конфигурации Debug они есть. Так в STL, например, производятся дополнительные проверки итераторов перед операциями инкремента и декремента:


    Поэтому в конфигурации Release программа может работать значительно быстрее, но и могут возникнуть новые ошибки, если код недостаточно хорошо написан и протестирован.
  • Производится оптимизация по уменьшению времени выполнения. По ссылке представлено описание возможных оптимизаций на примере компилятора C#.
  • Используются разные версии библиотек. Поэтому для запуска исполняемого файла на компьютере пользователя требуется установить соответствующие библиотеки. Для исполняемого файла, скомпилированного в конфигурации Debug, используются библиотеки с суффиксом D:


    Единственный способ установить их - скопировать необходимые DLL с компьютера разработчика. Для исполняемого файла, скомпилированного в конфигурации Release, можно установить все необходимые библиотеки из распространяемого пакета Microsoft Visual C++, чтобы избежать такой ошибки:


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


    Изменять настройки проекта следует синхронно: для Debug и Release друг за другом, чтобы не допустить ситуации, когда, например, в Debug используются библиотеки OpenGL, а в Release их нет.

3 комментария: