c++ - 在 VS2019 中编辑并继续
问题描述
我刚刚将一个主要的 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(),然后尝试设置断点。
解决方案
不太了解你的具体情况和操作,因为没有一些图片和代码详细说明问题。
但是require match
我使用的这个函数可能会在使用选项进行调试时闯入更改的代码。您应该将光标移回更改的代码,然后逐步调试以下代码。并且当您将光标移回更改的代码时,vc++ 项目将自动重建更改的代码,您不必停止调试并重新启动构建。
更新 1
我也面临着同样的行为。由于我们无法再在这里处理这个问题,我在我们的 DC 论坛上报告了这个问题。
如果我没有详细描述该问题,您可以投票并添加任何评论,以便获得更多微软的关注。我希望团队能给您一个满意的答复。
推荐阅读
- python - 绘制边缘宽度与其权重成正比的图形
- angular - 当我使用 ng serve 运行时,如何在我的 Angular6 项目中使用 ionic4 组件
- shell - 查找所有子文件夹并复制其内容
- python - 像 C++ 中的 cin >> 这样从一行中一个接一个地读取元素
- sql-server - 如何阻止来自所有 Microsoft SQL Server 进程的传出网络请求?
- android - 我们可以使用 Gson 库在常规类上解析 JSON 吗?
- c# - 声明中的“this [string name]”是什么意思:“public string this[string name]”
- ios - 无粘贴:canPerformAction:withSender 中的操作:
- ios - 无法运行颤振。抛出“找不到包颤动:”错误
- java - REST中通过另一个资源ID命名获取资源的做法是什么