【问题标题】:Slow debugging in Visual Studio 2015 -- can't turn off page heap?Visual Studio 2015 中的调试缓慢——无法关闭页堆?
【发布时间】:2018-07-23 20:02:07
【问题描述】:

我正在运行 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。不确定这是否相关。

【问题讨论】:

  • “我正在运行 Visual Studio 2015” - 考虑升级到最新的 2017。
  • 慢有多慢?页面堆不应该那么慢。也许您只是内存不足?
  • @VTT 速度太慢,在与另一个应用程序通信时会导致计时问题。
  • “页堆:pid 0x530:页堆启用,标志为 0x2”。是的,你不想要那个。您运行 gflags.exe 将其打开,有时对查找堆损坏错误很有用。只是有时,appverifier 是更好的工具。但是你忘了关掉它,再运行一次。
  • 我试图将其关闭,请参阅原帖。

标签: c++ visual-studio-2015 wxwidgets pageheap


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多