0

我正在运行 Visual Studio 2015,之前从未遇到过调试问题。但是,最近调试很慢。我还开始收到来自 Microsoft Visual C++ 运行时库的堆调试错误,说“检测到堆损坏”。我将修复应用程序在堆缓冲区结束后写入内存的错误,但即使我没有运行引发这些错误的代码,调试器也非常慢。我认为有一些堆检查设置,我想将其关闭。

调试输出窗口顶部有两行,每行都说Page heap: pid 0x530: page heap enabled with flags 0x2.我相信这是问题的根源,或者至少是相关的。我无法关闭页堆。我在 gflags GUI 中尝试过(没有检查任何内容,但我尝试检查和取消检查),并在命令行上尝试过。重新启动VS,重新启动我的电脑,卸载并重新安装VS......没有任何效果。

当我在 VS 中运行发布配置时,它仍然很慢,并且我仍然在输出窗口顶部看到页面堆消息。但是,应用程序并没有收到堆调试错误消息,而是冻结了。但是页面堆消息让我认为这是 VS 之外的问题,与我的调试配置无关。

编辑:我正在使用 wxWidgets 3.1,我注意到我的程序在 wxWidgets 相关事件期间运行最慢,例如打开文件或将多行输出到 textCtrl。不确定这是否相关。

4

1 回答 1

0

我相信我解决了这个问题。GlobalFlag 标志确实已设置。我使用 Process Monitor 查看正在从注册表访问哪些键,这证实了我怀疑 GFlags 正在用于我的特定图像文件。我不知道为什么命令行和 gflags 的 GUI 版本都不允许我查看或编辑标志。

无论如何,我去了注册表编辑器(regedit)并导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageFileName. 在那里,GlobalFlag被设置为 0x20000000,这个页面解释是页面堆的标志。因此,按照此页面的指示,我将 GlobalFlag 设置为 -FFFFFFFF 并且它起作用了!我能够再次正常调试。

编辑:不完全。调试器现在速度更快,不再滞后。但是,我仍然偶尔会收到“堆调试错误”。

于 2018-07-31T18:31:34.737 回答