发生了什么导致调试版本与未附加的版本相比,附加到调试器的速度要慢得多?它们都是相同的exe运行.
编辑:大多数答案都集中在断点上.我仍然像没有断点的泥浆,OutputDebugString或观察窗口中的任何东西一样运行.那么调试CRT,运行时堆栈检查和调试堆呢?
解决方法
如果它不是OutputDebugString或者成堆的断点会减慢一切,请尝试以下方法:
> Windows调试堆 – 如果调试堆在调试器下运行,您的进程将获得调试堆,没有问题.要在Visual Studio调试器下运行时禁用此功能,请访问项目属性的调试页面,并将_NO_DEBUG_HEAP = 1添加到环境中.
(Windows调试堆与CRT调试堆是分开的.如果它在调试器下运行,你的发布版本也将获得Windows调试堆.)
>该程序加载了许多带符号的DLL.加载DLL时,Visual Studio会尝试为其查找符号.如果有可用的符号,这可能需要一些时间.除了重新安排你的程序以便它不经常加载DLL之外,你无能为力.
>检查对IsDebuggerPresent的任何调用 – 这可能会在调试器中运行和外部调用之间引入任意差异.
(作为最后的一次性建议 – 我也会怀疑在调试过程时异常(无论是C还是结构化)可能会更多地涉及.所以如果你的程序投入很多,那么当它的程序可能会慢一点时正在调试.)