c++ - 为什么 "Start Debugging"在VC2010中比 "attach to process"慢这么多?

标签 c++ visual-studio-2010 debugging

我有一个程序在哈希表 (boost::unordered_map/unordered_set) 等中保存几 MB(最多 GB)。当在 VC2010 中使用“开始调试”时,释放这样的表可能需要非常长的时间(几分钟) ), 所以我通常不得不终止这个过程。如果我在没有调试的情况下启动相同的二进制文件,释放会在几分之一秒内完成。 在这两种情况下,我都使用相同的优化版本 x64 构建。

我阅读了该主题的 2 个现有问题:

但他们没有回答我的问题: 当我开始调试时具体做了什么,有没有办法关闭它?我需要的是检测访问冲突和设置断点的可能性等。无法通过释放等有时是一个真正的问题。使用“不调试启动”然后附加到进程并不能真正使事情变得更容易。

最佳答案

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

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

关于c++ - 为什么 "Start Debugging"在VC2010中比 "attach to process"慢这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21483793/

相关文章:

c++ - 对已经排序了 n 个第一个元素的 vector 进行排序?

c++ - 安全模式调用dll

c++ - Visual Studio 2010 全局 VC++ 目录 Redux

visual-studio - Visual Studio 2015中的经典ASP “Application debugging is disabled”

.net - 我可以使用 VS2010 的 Intellitrace 收集 Windows 服务的数据吗?

crash - 触发断点时应用程序退出而没有通知/错误

c++ - 为什么调用从对象移出的析构函数?

c++ - 我们可以用 C++ 开关写这个吗?

c++ - Visual Studio 问题/C++

.net - Visual Studio 2012 可以与 Visual Studio 2010 并行安装吗?