Распространенные проблемы, возникающие при создании построений выпуска
Обновлен: Ноябрь 2007
В процессе разработки обычно выполняется построение и тестирование отладочного построения проекта. При последующем построении сборки выпуска могут возникать ошибки нарушения прав доступа.
В этом разделе приведены основные различия между построениями отладки и выпуска. В этом списке приведены только основные различия, которые могут привести к сбою построения выпуска приложения, в построении отладки которого отсутствовали ошибки.
Размещение в куче
Компиляция
Поддержка указателей
Оптимизация
Дополнительные сведения о порядке перехвата ошибок построения выпуска в сборке построения см. в описании параметра компилятора /GZ (перехват ошибок сборки выпуска в сборке построения).
Размещение в куче
В 90 процентах случаев проблемы сборки выпуска приложения, работающего без ошибок в сборке отладки, связаны с размещением в куче.
При построении проекта для отладки используется механизм распределения памяти для отладки. В этом случае все операции выделения памяти заключаются в охранные байты. Охранные байты используются для обнаружения перезаписи памяти. В построениях отладки и выпуска применяются разные механизмы размещения в куче. В связи с этим операция перезаписи памяти, не вызывающая ошибок в сборке отладки, может привести к неустранимым последствиям в сборке выпуска.
Дополнительные сведения см. в разделах Проверка перезаписи памяти и Проверка перезаписи памяти в отладочном построении.
Компиляция
При построении сборки выпуска изменяется большинство макросов и реализаций библиотеки MFC. В частности, в построении выпуска макрос ASSERT возвращает пустое значение, в связи с чем содержащийся в нем код не выполняется. Дополнительные сведения см. в разделе Проверка операторов ASSERT.
В целях повышения производительности некоторые функции определяются в построении выпуска как встроенные. В построениях выпуска обычно используется оптимизация. Также в них используется другой механизм распределения памяти.
Поддержка указателей
В связи с отсутствием сведений об отладке из приложения удаляется заполнение. В сборке выпуска существует высокая вероятность наличия свободных указателей, которые указывают на неинициализированную область памяти, а не сведения об отладке.
Оптимизация
В процессе оптимизации некоторых сегментов кода компилятор может добавлять непредвиденный код. Вероятность возникновения ошибок в построении выпуска при этом незначительна, однако на такие случаи следует обращать внимание. Сведения о способах устранения см. в разделе Оптимизация кода.