为什么"开始调试"比#&34;附加到流程"慢得多在VC2010?

时间:2014-01-31 15:32:47

标签: c++ visual-studio-2010 debugging

我有一个程序在哈希表中保存了几个MB(最多为GB)(boost :: unordered_map / unordered_set)等。何时使用"开始调试"在VC2010中,释放这样的表可能需要很长的时间(几分钟),因此我通常必须终止该过程。如果我在没有调试的情况下启动相同的二进制文件,则会在几分之一秒内完成。 在这两种情况下,我都使用相同的优化版x64版本。

我读了2个现有的问题:

但他们不回答我的问题: 当我开始调试时,具体做了什么,是否有办法将其关闭?我需要的是检测访问违规和设置断点等的可能性。无法通过解除分配等有时是一个真正的问题。使用"无需调试即可启动"后来加入到这个过程并不能让事情变得更容易。

1 个答案:

答案 0 :(得分:2)

当你正常启动它时,你的程序将在启用Windows调试堆的情况下运行。这很好,它增加了许多指针检查,当堆即将被破坏或释放坏指针时,它会自动调用一个中断。但是,当您使用大型数据集进行调试时,会增加开销,这确实会降低代码速度。

实用的解决方案是避免使用jiggabyte数据集进行调试。或者,您可以设置一个禁用调试堆的环境变量。项目+属性,调试,环境,添加_NO_DEBUG_HEAP=1