Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Функция «Edit and Continue» для проектов на C++ поддерживает большинство типов изменений кода. Однако некоторые изменения нельзя применить во время выполнения программы. Чтобы применить эти изменения, необходимо остановить выполнение и создать новую версию кода.
См. «Изменить и продолжить» (C++) для получения информации о работе с Edit and Continue для C++ в Visual Studio.
Требования
Параметры сборки (свойства проекта > )
C/C++ > Общий > формат сведений отладки: база данных программы для редактирования и продолжения (
/ZI)Компоновщик > Общее > включение добавочной компоновки: Да (
/INCREMENTAL)Любые несовместимые параметры компоновщика (например
/SAFESEHили/OPT:...) могут вызвать предупреждение LNK4075 во время сборки. Пример:LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification
Параметры отладчика (параметры отладки > )
Откройте панель параметров Отладка (или Инструменты) >Варианты, и разверните раздел Все параметры>Отладка>.NET/C++ Горячая перезагрузка.
Откройте диалоговое окно "Параметры отладки" (или "Средства") >"Опции", и разверните раздел "Отладка>/C++ с быстрой перезагрузкой".
Выберите один или все из следующих параметров, чтобы включить эту функцию:
Включение горячей перезагрузки: включает горячую перезагрузку при запуске подключенного отладчика (F5).
Включите горячую перезагрузку при запуске без отладки: включает горячую перезагрузку при запуске без подключенного отладчика (CTRL + F5).
Включение горячей перезагрузки при сохранении файла: включает горячую перезагрузку при сохранении файла.
Детализация ведения журнала. Задайте уровень ведения журнала при включенной горячей перезагрузке. Выберите вариант "Минимальный " (по умолчанию), "Подробный" или "Диагностика".
Изменение этих параметров влияет на все проекты, над которые вы работаете. После изменения параметра не требуется перестроить приложение. Если вы создаете приложение из командной строки или из файла makefile, но выполняется отладка в среде Visual Studio, вы по-прежнему можете использовать команду "Изменить" и "Продолжить", если задать /ZI этот параметр.
В диалоговом окне "Отладка" (или "Инструменты") >"Параметры", разверните раздел "Отладка>Общие", и установите флажок "Включить собственные средства редактирования и продолжения".
Все несовместимые параметры компилятора или компоновщика вызывают ошибку во время редактирования и продолжения.
Пример: Edit and Continue : error : ‘file.cpp’ in ‘MyApp.exe’ was not compiled with Edit and Continue enabled. Ensure that the file is compiled with the Program Database for Edit and Continue (/ZI) option.
Неподдерживаемые изменения
Следующие изменения C/C++ нельзя применить во время сеанса отладки. Если внести какие-либо из этих изменений, а затем попытаться применить изменения кода, в окне вывода появится сообщение об ошибке или предупреждение.
Большинство изменений в глобальных или статических данных.
Изменения исполняемых файлов, скопированных с другого компьютера и не созданных локально.
Изменения типа данных, влияющие на структуру объекта, такие как члены данных класса.
Добавление более 64k байтов нового кода или данных.
Добавление переменных, требующих конструктора в точке перед указателем инструкции.
Изменения, влияющие на код, требующий инициализации во время выполнения.
Добавление обработчиков исключений в некоторых случаях.
Изменения файлов ресурсов.
Изменение кода в файлах с доступом только для чтения.
Изменения кода без соответствующего PDB-файла.
Изменения в коде, который не имеет файла объектов.
Изменение лямбда-кодов в следующих сценариях:
- Если лямбда-выражения имеют статический или глобальный член.
- Когда вы передаете лямбда в
std::function. Этот метод вызывает подлинное нарушение ODR и приводит к возникновению ошибки C1092.
Изменение и продолжение не обновляет статические библиотеки. При внесении изменений в статическую библиотеку выполнение продолжается со старой версией, и предупреждение не выводится.
Неподдерживаемые сценарии
Функция "Edit and Continue" для C/C++ недоступна в следующих сценариях отладки:
Отладка собственных приложений, скомпилированных с помощью /Zo (улучшение оптимизированной отладки)
Проекты, использующие набор инструментов MSVC версии 120 и коммутатор C/C++
/bigobj. Изменение и продолжение/bigobjподдерживается только в средствах сборки MSVC версии 140 и более поздних версий.Отладка в смешанном режиме (собственный или управляемый).
Отладка JavaScript.
Отладка SQL.
Отладка файла дампа.
Редактирование кода после необработанного исключения, когда не выбрана опция размотка стека вызовов при необработанных исключениях.
Отладка приложения с помощью подключения вместо запуска приложения, выбрав "Пуск " в меню отладки .
Отладка оптимизированного кода.
Отладка старой версии кода после сбоя сборки новой версии из-за ошибок сборки.
Использование пользовательского пути компилятора (cl.exe). По соображениям безопасности для повторной компиляции файла во время редактирования и продолжения Visual Studio всегда использует установленный компилятор. Если вы используете путь пользовательского компилятора (например, с помощью пользовательской
$(ExecutablePath)переменной в*.propsфайле), отображается предупреждение, а Visual Studio возвращается к использованию установленного компилятора той же версии или архитектуры.Устаревшие архитектуры и наборы инструментов MSVC. С помощью набора инструментов MSVC версии 140 отладчик по умолчанию поддерживает редактирование и продолжение работы с приложениями X86 и X64. Устаревшие наборы инструментов поддерживают только приложения X86. Наборы инструментов старше MSVC версии 120 должны использовать отладчик прежних версий, установив флажок "Параметры отладки >> общего > использования режима собственной совместимости", чтобы использовать режим редактирования и продолжения.
Ограничения связывания
Параметры компоновщика, отключающие возможность редактирования и продолжения выполнения программы
Следующие параметры компоновщика отключают Редактирование и продолжение.
Параметр /OPT:REF, /OPT:ICF или /INCREMENTAL:NO отключает изменение и продолжение со следующим предупреждением:
LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /OPT specificationПараметр /ORDER, /RELEASE или /FORCE отключает изменение и продолжение со следующим предупреждением:
LINK : warning LNK4075: ignoring /INCREMENTAL due to /option specificationУстановка любого параметра, препятствующего созданию файла базы данных программы (PDB), отключает изменение и продолжение без определенного предупреждения.
Ограничения автоматического повторного связывания
По умолчанию функция "Edit and Continue" выполняет перелинковку вашей программы в конце сеанса отладки, чтобы создать актуальный исполняемый файл.
Изменить и продолжить не может пересвязывать программу, если вы выполняете отладку из места, отличного от исходного местоположения сборки. Сообщение сообщает, что необходимо перестроить вручную.
Редактирование и продолжение не перестраивает статические библиотеки. Если вы вносите изменения в статическую библиотеку с помощью правки и продолжения, необходимо вручную перестроить библиотеку и повторно связать приложения с его помощью.
Функция «Изменение и продолжение» не вызывает пользовательские шаги сборки. Если в вашей программе используются пользовательские шаги сборки, возможно, вам понадобится перестроить её вручную, чтобы пользовательские шаги сборки могли быть вызваны. В этом случае вы можете отключить повторное связывание после функции "Редактировать и продолжать", чтобы убедиться, что вам будет предложено вручную выполнить перестроение.
Чтобы отключить повторное связывание после изменения и продолжения, выполните приведенные ниже действия.
В меню Отладка выберите Параметры и Настройки.
В диалоговом окне "Параметры", в узле Отладка, выберите узел "Изменить и продолжить".
Снимите флажок "Изменения связанного кода" после завершения отладки.
Ограничения предварительно скомпилированного заголовка
По умолчанию функция Edit and Continue загружает и обрабатывает предварительно скомпилированные заголовки в фоновом режиме, чтобы ускорить обработку изменений кода. Загрузка предварительно скомпилированных заголовков требует выделения физической памяти, что может быть проблемой при компиляции на компьютере с ограниченным объемом ОЗУ. Вы можете определить, может ли это быть проблемой с помощью диспетчера задач Windows, чтобы определить объем доступной физической памяти во время отладки. Если этот объем превышает размер предварительно скомпилированных заголовков, то функция Edit and Continue не вызовет проблем. Если размер меньше размера предварительно скомпилированных заголовков, можно запретить загрузку предварительно скомпилированных заголовков в фоновом режиме.
Чтобы отключить фоновую загрузку предварительно скомпилированных заголовков для редактирования и продолжения:
В меню Отладка выберите Параметры и Настройки.
В диалоговом окне "Параметры", в узле Отладка, выберите узел "Изменить и продолжить".
Снимите флажок "Разрешить предварительную компиляцию ".
Ограничения атрибутов IDL
Функция "Изменение и продолжение" не обновляет файлы языка определения интерфейса (IDL). Поэтому изменения атрибутов IDL не отражаются во время отладки. Чтобы увидеть результат изменений атрибутов IDL, необходимо остановить отладку и перестроить приложение. Изменение и продолжение не создает ошибку или предупреждение, если атрибуты IDL изменились. Дополнительные сведения см. в разделе "Атрибуты IDL".
Диагностические проблемы
Если сценарий не соответствует ни одному из указанных выше условий, можно собрать дополнительные сведения, установив следующее значение реестра DWORD:
Откройте командную строку разработчика.
Выполните следующую команду:
VsRegEdit.exe set “C:\Program Files\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1VsRegEdit.exe set “C:\Program Files (x86)\Microsoft Visual Studio\[Version]\[YOUR EDITION]” HKCU Debugger NativeEncDiagnosticLoggingLevel DWORD 1
Задание этого значения в начале сеанса отладки приводит к тому, что различные компоненты Edit and Continue начинают вывод подробных журналов на панели Debug окна >.