Изменить и продолжить в VS2019

Я только что обновил крупный проект C++ с VS2010 до VS2019, и у меня возникли проблемы с тем, чтобы функция «Редактировать и продолжить» работала так, как раньше, особенно в отношении параметра «Требовать, чтобы исходные файлы точно соответствовали исходной версии» (который Я буду называть настройку «требовать совпадения», потому что она короче).

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

В VS2019 кажется, что «Редактировать и продолжить» не будет работать без параметра «требовать совпадение», но установка точек останова в существующем коде не может быть выполнена с помощью «требовать совпадение» после внесения каких-либо изменений.

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

Любые решения здесь, или «Редактировать и продолжить» просто не работает так, как раньше?

Вот несколько фотографий...

Во-первых, во время работы моей программы я внес некоторые изменения в файл surfdraw_panels.cpp, а затем добавил точку останова. Он показывает следующее сообщение...

введите здесь описание изображения

Затем загружает [устаревшую] версию кода с точкой останова, установленной в устаревшем коде...

введите здесь описание изображения

В других случаях, когда я вношу изменения, я получаю другой результат, и он вообще не позволяет мне установить точку останова... В VS2010 можно было отключить параметр «требовать совпадение» и по-прежнему использовать « Изменить и продолжить», но VS2019 этого не допустит, хотя это по-прежнему рекомендуемое «решение» в сообщении!

введите здесь описание изображения

Проект Github, который показывает проблему, приведен ниже. Это простое диалоговое приложение MFC, созданное мастером создания новых проектов в VS2019. В диалоговом окне есть единственная кнопка и некоторый простой код, который что-то делает в кнопке. Чтобы воссоздать проблему, запустите приложение в отладчике, затем внесите изменения в OnBnClickedButton1() и попробуйте установить точку останова.

https://github.com/surfdabbler/MFCApplication1


person user1961169    schedule 18.12.2020    source источник
comment
Оно работает. Пробовали восстановить все? Все ли проекты настроены на использование новейшего набора инструментов?   -  person Kenny Ostrom    schedule 18.12.2020
comment
Да и Да. :)   -  person user1961169    schedule 18.12.2020
comment
Какая у вас версия VS2019? VS2019 16.8? Если ваш VS не самый последний, обновите его.   -  person Mr Qian    schedule 18.12.2020
comment
Если новая последняя версия vs имеет такое же поведение, я предлагаю вам поделиться с нами образцом воспроизведения из github.   -  person Mr Qian    schedule 18.12.2020
comment
Ах, я говорил слишком рано. Обновился с 16.2 на 16.8, и сначала вроде было хорошо, но нет, все равно. Я попробую создать новый проект и посмотрю, получу ли я такое же поведение.   -  person user1961169    schedule 18.12.2020
comment
Я создал простой проект, чтобы показать проблему. Это описано в конце вопроса выше с описанием того, как воссоздать проблему.   -  person user1961169    schedule 18.12.2020
comment
@ user1961169, Похоже, эта ссылка не работает. Пожалуйста, попробуйте поделиться эффективной ссылкой здесь.   -  person Mr Qian    schedule 21.12.2020
comment
Извините, это было приватно. Я обнародовал это сейчас. Проверьте еще раз, пожалуйста.   -  person user1961169    schedule 21.12.2020
comment
Это хорошо. Я проверю.   -  person Mr Qian    schedule 22.12.2020
comment
@ user1961169, я думаю, что это проблема, и я тоже столкнулся с той же проблемой на своей стороне. Я сообщил о проблеме команде. Пожалуйста, мой обновленный ответ. Вы можете проверить это.   -  person Mr Qian    schedule 22.12.2020


Ответы (1)


Не совсем понимаю вашу конкретную ситуацию и операцию, потому что нет каких-то картинок и кода, чтобы подробно объяснить проблему.

Но эта функция, которую я использовал, могла взломать измененный код во время отладки с опцией require match. Вы должны переместить курсор обратно к измененному коду, а затем шаг за шагом выполнить отладку приведенного ниже кода. И когда вы перемещаете курсор обратно к измененному коду, проект vc++ автоматически перестраивает измененный код, и вам не нужно останавливать отладку и перезапускать сборку.

введите здесь описание изображения

Обновление 1

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

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

person Mr Qian    schedule 18.12.2020
comment
Ваш код уже находится в состоянии останова, когда вы вносите изменения в код. Как только вы продолжите, перестроение выполнено, и работающий код снова соответствует исходному коду. Это отличается от моей ситуации, потому что я вношу изменения в код во время работы программы. Я добавил несколько фотографий в свой пост, чтобы лучше показать, что происходит. - person user1961169; 18.12.2020