在 VS2019 中编辑并继续
Edit and Continue in VS2019
我刚刚将一个主要的 C++ 项目从 VS2010 更新到 VS2019,我在编辑和继续像以前一样工作时遇到问题,特别是与 'Require source files to exactly match the original version' 设置相关(我将被称为 'require match' 设置,因为它更短)。
我习惯于 运行ning 我的程序,在 运行ning 时更改源代码,然后设置断点以在之前捕获 运行ning 应用程序更改后的代码。当遇到断点时,我可以按 F5 重建并继续。
在 VS2019 中,如果没有 'require match' 设置,Edit and Continue 似乎无法工作,但是一旦进行任何更改,'require match' 无法在现有代码中设置断点。
有几个变通办法,但 none 是最理想的。可以打开“需要匹配”来构建和 运行 程序,然后在进行一些代码更改后,将其关闭以设置断点,然后再次打开它以进行重建并继续。这是一个巨大的痛苦。可以使用暂停并继续强制重建任何编辑,但这只有在代码更改完成到足以构建时才有效。如果我想中断检查变量,这是行不通的。有一两次我确实设法在更改的代码上设置断点,它会自动转到陈旧的代码,这是可以接受的,但我现在无法做到这一点。此外,现在我的断点在已重建的已编辑代码上显示为有效,我知道是 运行ning,但断点未被击中。
此处有任何解决方案,或者“编辑并继续”是否无法正常工作?
这是一些照片...
首先,当我的程序是运行ning时,我对surfdraw_panels.cpp做了一些改动,然后去添加一个断点。它显示以下消息...
然后加载代码的 [陈旧] 版本,并在陈旧代码中设置断点...
其他时候,当我进行更改时,我会得到不同的结果,它根本不允许我设置断点...在 VS2010 中,可以关闭 'require match'设置,仍然使用'Edit and continue',但是VS2019不会允许这样,尽管它仍然是消息中推荐的'solution'!
Github 显示问题的项目如下。这是一个简单的 MFC 应用程序,基于对话框,由 VS2019 中的新项目向导创建。对话框上只有一个按钮,按钮中有一些简单的代码可以执行某些操作。要重现问题,请在调试器中启动应用程序,然后更改 OnBnClickedButton1(),然后尝试设置断点。
不太了解你的具体情况和操作,因为没有一些图片和代码来详细说明问题。
但是 我使用的这个函数可能会在使用 require match
选项调试期间中断更改的代码。您应该将光标移回更改的代码,然后逐步调试以下代码。当您将光标移回更改的代码时,vc++ 项目将自动重建更改的代码,您无需停止调试并重新构建。
更新 1
我身边也遇到过同样的行为。由于我们无法再处理这里的问题,我 reported the issue on our DC Forum.
如果我没有详细描述问题,您可以投票并添加任何评论,这样它会得到更多 Microsoft 的关注。也希望团队能给您一个满意的答复
我刚刚将一个主要的 C++ 项目从 VS2010 更新到 VS2019,我在编辑和继续像以前一样工作时遇到问题,特别是与 'Require source files to exactly match the original version' 设置相关(我将被称为 'require match' 设置,因为它更短)。
我习惯于 运行ning 我的程序,在 运行ning 时更改源代码,然后设置断点以在之前捕获 运行ning 应用程序更改后的代码。当遇到断点时,我可以按 F5 重建并继续。
在 VS2019 中,如果没有 'require match' 设置,Edit and Continue 似乎无法工作,但是一旦进行任何更改,'require match' 无法在现有代码中设置断点。
有几个变通办法,但 none 是最理想的。可以打开“需要匹配”来构建和 运行 程序,然后在进行一些代码更改后,将其关闭以设置断点,然后再次打开它以进行重建并继续。这是一个巨大的痛苦。可以使用暂停并继续强制重建任何编辑,但这只有在代码更改完成到足以构建时才有效。如果我想中断检查变量,这是行不通的。有一两次我确实设法在更改的代码上设置断点,它会自动转到陈旧的代码,这是可以接受的,但我现在无法做到这一点。此外,现在我的断点在已重建的已编辑代码上显示为有效,我知道是 运行ning,但断点未被击中。
此处有任何解决方案,或者“编辑并继续”是否无法正常工作?
这是一些照片...
首先,当我的程序是运行ning时,我对surfdraw_panels.cpp做了一些改动,然后去添加一个断点。它显示以下消息...
然后加载代码的 [陈旧] 版本,并在陈旧代码中设置断点...
其他时候,当我进行更改时,我会得到不同的结果,它根本不允许我设置断点...在 VS2010 中,可以关闭 'require match'设置,仍然使用'Edit and continue',但是VS2019不会允许这样,尽管它仍然是消息中推荐的'solution'!
Github 显示问题的项目如下。这是一个简单的 MFC 应用程序,基于对话框,由 VS2019 中的新项目向导创建。对话框上只有一个按钮,按钮中有一些简单的代码可以执行某些操作。要重现问题,请在调试器中启动应用程序,然后更改 OnBnClickedButton1(),然后尝试设置断点。
不太了解你的具体情况和操作,因为没有一些图片和代码来详细说明问题。
但是 我使用的这个函数可能会在使用 require match
选项调试期间中断更改的代码。您应该将光标移回更改的代码,然后逐步调试以下代码。当您将光标移回更改的代码时,vc++ 项目将自动重建更改的代码,您无需停止调试并重新构建。
更新 1
我身边也遇到过同样的行为。由于我们无法再处理这里的问题,我 reported the issue on our DC Forum.
如果我没有详细描述问题,您可以投票并添加任何评论,这样它会得到更多 Microsoft 的关注。也希望团队能给您一个满意的答复