【问题标题】:Edit and Continue in VS2019在 VS2019 中编辑并继续
【发布时间】:2021-03-28 18:20:09
【问题描述】:

我刚刚将一个主要的 C++ 项目从 VS2010 更新到 VS2019,我在让 Edit and Continue 像以前一样工作时遇到了问题,特别是与“要求源文件与原始版本完全匹配”有关设置(我将其称为“要求匹配”设置,因为它更短)。

我习惯于运行我的程序,在源代码运行时对其进行更改,然后设置断点以在更改代码之前捕获正在运行的应用程序。当断点被命中时,我可以按 F5 来重建并继续。

在 VS2019 中,如果没有 'require match' 设置,Edit and Continue 似乎将无法工作,但是一旦进行任何更改,就无法使用 'require match' 在现有代码中设置断点。

有几种解决方法,但没有一个是理想的。可以打开“require match”来构建和运行程序,然后在进行一些代码更改后,将其关闭以设置断点,然后再次将其重新打开以进行重建并继续。这是一个巨大的痛苦。可以使用暂停并继续强制重新构建任何编辑,但这仅在代码更改完成到足以构建时才有效。如果我想中断检查一个变量,这是行不通的。一两次我确实设法在更改的代码上设置了一个断点,它会自动转到陈旧的代码,这是可以接受的,但我现在无法做到这一点。另外,现在我的断点在已重新构建的已编辑代码上显示为有效,并且我知道它正在运行,但没有命中断点。

这里有任何解决方案,还是“编辑并继续”根本不像以前那样有效?

这里有一些图片...

首先,当我的程序运行时,我对 surfdraw_panels.cpp 进行了一些更改,然后添加了一个断点。它显示以下消息...

然后加载代码的 [stale] 版本,并在过时代码中设置断点...

其他时候,当我进行更改时,我会得到不同的结果,并且根本不允许我设置断点...在 VS2010 中,可以关闭“要求匹配”设置并仍然使用“编辑并继续”,但 VS2019 不允许这样做,即使它仍然是消息中推荐的“解决方案”!

显示该问题的 Github 项目如下。这是一个简单的 MFC 应用程序,基于对话框,由 VS2019 中的新项目向导创建。对话框上有一个按钮,以及一些在按钮中执行某些操作的简单代码。要重现问题,请在调试器中启动应用程序,然后更改 OnBnClickedButton1(),然后尝试设置断点。

https://github.com/surfdabbler/MFCApplication1

【问题讨论】:

  • 它有效。您是否尝试过全部重建?是否所有项目都设置为使用最新的工具集?
  • 是的,是的。 :)
  • 你的VS2019版本是多少? VS2019 16.8?如果你的VS不是最新的,请更新一下。
  • 如果最新的vs版本有同样的行为,我建议你可以和我们分享一个来自github的reproduce sample。
  • 啊,我说得太早了。我从 16.2 更新到 16.8,一开始我虽然很好,但不,它仍然存在。我会尝试做一个新项目,看看我是否得到相同的行为。

标签: c++ visual-studio-2019 visual-studio-debugging edit-and-continue


【解决方案1】:

不太了解你的具体情况和操作,因为没有一些图片和代码详细说明问题。

但是我使用的这个函数可能会在使用require match 选项进行调试时闯入更改的代码。您应该将光标移回更改的代码,然后逐步调试以下代码。并且当您将光标移回更改后的代码时,vc++项目会自动重新构建更改后的代码,您不必停止调试并重新构建。

更新 1

我也面临同样的行为。由于我们无法再处理这里的问题,我reported the issue on our DC Forum

如果我没有详细描述问题,您可以投票并添加任何 cmets,以便获得更多微软的关注。也希望团队能给您一个满意的答复。

【讨论】:

  • 当您更改代码时,您的代码已经处于中断状态。只要您继续,重建就完成了,运行代码再次与源代码匹配。这与我的情况不同,因为我在程序运行时进行代码更改。我在帖子中添加了一些图片,以更清楚地显示正在发生的事情。
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
相关资源
最近更新 更多