我刚刚将一个主要的 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(),然后尝试设置断点。