Поддерживаемые изменения и ограничения кода (C++)
В Visual C+ большинство типов изменений, вносимых в код, обрабатывается в режиме «Изменить и продолжить». Некоторые изменения, однако, не могут быть применены во время выполнения программы. Чтобы применить эти изменения, необходимо остановить выполнение и собрать обновленную версию кода.
В разделе Режим "Изменить и продолжить" (Visual C++) приведены сведения о работе в режиме «Изменить и продолжить» для C++ в Visual Studio.
Содержание этой статьи
Неподдерживаемые изменения
Неподдерживаемые сценарии
Ограничения компоновки
Ограничения предварительно откомпилированных заголовков
Ограничения атрибутов IDL
Неподдерживаемые изменения
Следующие изменения в коде C/C++ не могут быть применены во время сеанса отладки.
Большинство изменений в глобальных или статических данных.
Изменения в исполняемых файлах, которые были скопированы с другого компьютера, а не собраны локально.
Изменения в типах данных, которые влияют на структуру объекта, например изменения в данных-членах класса.
Добавление более 64 Кбайт нового кода или данных.
Добавление переменных, требующих конструктор в точке, предшествующей указателю инструкции.
Изменения, которые влияют на код, требующий инициализации во время выполнения.
Добавление обработчиков исключений в некоторых экземплярах.
Изменения в файлах ресурсов.
Изменения в коде файлов, доступных только для чтения.
Изменения в коде при отсутствии соответствующего PDB-файла.
Изменения в коде, для которого отсутствует объектный файл.
Если сделать одно из таких изменений и попытаться применить его, в окне Вывод отобразится сообщение об ошибке или предупреждение.
- Операция "Изменить и продолжить" не обновляет статические библиотеки. При внесении изменения в статическую библиотеку выполнение будет продолжено со старой версией без выдачи предупреждения.
Неподдерживаемые сценарии
Операция "Изменить и продолжить" для C/C++ не доступна в следующих сценариях отладки:
Отладка родных приложений, скомпилированных с /Zo (Enhance Optimized Debugging)
отладка приложений или компонентов для Магазина Windows;
отладка в Windows 98;
отладка в смешанном режиме (машинный код/управляемый код);
отладка JavaScript;
отладка SQL;
отладка с использованием файла дампа;
изменение кода после необработанного исключения, когда не включен параметр Очищать стек вызовов от кадров необработанных исключений;
отладка приложения с использованием команды Присоединиться к вместо запуска приложения кнопкой Пуск в меню Отладка;
отладка оптимизированного кода;
отладка старой версии кода после того, как новую версию не удалось собрать из-за ошибок сборки.
Содержание этой статьи
Ограничения компоновки
Параметры компоновщика, отключающие режим «Изменить и продолжить» | Ограничения автоматического повторного связывания
Параметры компоновщика, отключающие режим «Изменить и продолжить»
Следующие параметры компоновщика отключают режим "Изменить и продолжить".
Параметры /OPT:REF, /OPT:ICF и /INCREMENTAL:NO отключают режим "Изменить и продолжить" со следующим предупреждением:
LINK : предупреждение LNK4075: игнорируется /EDITANDCONTINUE из–за /OPT
specification
Параметры /ORDER, /RELEASE и /FORCE отключают режим "Изменить и продолжить" со следующим предупреждением:
LINK : предупреждение LNK4075: игнорируется /INCREMENTAL из–за /option
specification
Установка любых параметров, предотвращающих создание файла программной базы данных (.PDB), отключает режим "Изменить и продолжить" без предупреждения.
Ограничения автоматического повторного связывания
По умолчанию функция "Изменить и продолжить" повторно компонует программу в конце сеанса отладки, чтобы создать новый исполняемый файл.
Функция "Изменить и продолжить" не может осуществлять перекомпоновку программы, если отладка выполняется не из расположения исходного построения. Сообщение говорит о том, что необходимо вручную заново осуществить построение.
Функция "Изменить и продолжить" не осуществляет повторное построение статических библиотек. При внесении изменений в статическую библиотеку в режиме «Изменить и продолжить» необходимо вручную повторно осуществить построение библиотеки и повторно скомпоновать использующие ее приложения.
Функция "Изменить и продолжить" не вызывает шаги пользовательского построения. Если программа использует пользовательские шаги построения, может возникнуть необходимость произвести построение вручную, чтобы можно было вызывать пользовательские шаги построения. В этом случае можно отключить перекомпоновку после выполнения "Изменить и продолжить", чтобы предлагалось построение заново вручную.
Отключение перекомпоновки после выполнения "Изменить и продолжить"
В меню Отладка выберите Параметры и настройки.
В диалоговом окне Параметры откройте узел Отладка и выберите узел Изменить и продолжить.
Снимите флажок Перекомпоновка изменений кода после отладки.
Содержание этой статьи
Ограничения предварительно откомпилированных заголовков
По умолчанию в режиме "Изменить и продолжить" загружаются и обрабатываются предкомпилированные заголовки в фоновом режиме для ускорения обработки изменений кода. Загрузка предкомпилированных заголовков требует выделения физической памяти, что может быть проблемой в случае компиляции на компьютере с ограниченной RAM. Будет ли это являться проблемой, можно определить с помощью диспетчера задач Windows, выяснив объем доступной физической памяти во время отладки. Если это количество больше размера предварительно скомпилированных заголовков, то в режиме "Изменить и продолжить" не должно возникнуть проблем. Если объем свободной памяти меньше объема, необходимого для прекомпилированных заголовков, можно запретить средству "Изменить и продолжить" загружать прекомпилированные заголовки в фоновом режиме.
Чтобы отключить фоновую загрузку прекомпилированных заголовков для средства "Изменить и продолжить"
В меню Отладка выберите Параметры и настройки.
В диалоговом окне Параметры откройте узел Отладка и выберите узел Изменить и продолжить.
Снимите флажок Разрешить прекомпиляцию.
Содержание этой статьи
Ограничения атрибутов IDL
В режиме "Изменить и продолжить" не создаются повторно файлы определения интерфейса (IDL). Как следствие, изменения в атрибутах IDL не отображаются в ходе отладки. Для того чтобы увидеть изменения в атрибутах IDL, необходимо остановить процесс отладки и заново осуществить построение приложения. При режиме "Изменить и продолжить" не выводится сообщение об ошибке или предупреждение при изменении атрибутов IDL. Дополнительные сведения см. в разделе Атрибуты IDL.
Содержание этой статьи