无法在 Visual Studio 2017 (Native c++) 中禁用数据断点
Posted
技术标签:
【中文标题】无法在 Visual Studio 2017 (Native c++) 中禁用数据断点【英文标题】:Cannot disable data breakpoints in visual studio 2017 (Native c++) 【发布时间】:2018-07-19 10:55:46 【问题描述】:当我在“断点”窗口中取消选中数据断点时,写入内存时仍然会发生异常。但是,如果我将设置中的地址设置为另一个值,则不会发生异常。我该如何解决这个问题?
(Intel CORE I7, Windows 10, 32 位原生 c++)
这是一个错误吗? 我应该能够以这种方式禁用数据断点,我的期望是否现实?
【问题讨论】:
什么是“数据断点”?它与异常抛出有什么关系?您应该提供一些示例代码。 @VTT Google '什么是“数据断点”'。我也知道它们是硬件断点。 CPU 捕获对内存范围的写入并引发硬件异常。一种小型页面错误。 【参考方案1】:根据我的经验,这是一个错误(如果断点未选中)。而且很难复制。只需尝试删除数据断点。无论如何你都应该删除它,因为它很可能对下一次运行无效(变量的地址在每次运行中都会发生变化)。
【讨论】:
谢谢,我想我可以设置调试器忽略抛出的异常。我在启动时也遇到了一些奇怪的异常,我只是设置为忽略。当断点被禁用时,不会显示恼人的对话框,告诉您为什么它到达断点。有点担心忽略异常并不能阻止它的发生,因此会影响代码的时间。【参考方案2】:无法在 Visual Studio 2017 (Native c++) 中禁用数据断点
AFAIK,您无需手动禁用数据断点。
根据文档How to: Set a Data Breakpoint (Native Only):
变量的地址从一个调试会话更改为下一个调试会话。 因此,数据断点在 每个调试会话结束。
如果在局部变量上设置数据断点,数据断点 功能结束时保持启用状态。但是,内存地址它 设置上不再具有相同的含义。因此,结果 这样的断点是不可预测的。 如果您在 局部变量,最好的做法是删除或禁用 函数结束前的断点。
Visual Studio 每个支持最多四个数据断点 解决方案。
【讨论】:
我有相反的问题。我手动禁用它,它仍然被击中。以上是关于无法在 Visual Studio 2017 (Native c++) 中禁用数据断点的主要内容,如果未能解决你的问题,请参考以下文章
win7安装visual studio 2017无法进入安装界面
Visual Studio 2017 - 无法安装 WDK 扩展
无法在 Visual Studio 2017 中更改程序集的默认语言
无法在 Visual Studio 2017 RC 中添加全局 JavaScript Intellisense 引用