1

我刚刚将一个主要的 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

4

1 回答 1

1

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

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

在此处输入图像描述

更新 1

我也面临着同样的行为。由于我们无法再在这里处理这个问题,我在我们的 DC 论坛上报告了这个问题

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

于 2020-12-18T06:52:49.640 回答