pla*_*hos 19 c++ debugging visual-studio-2010 visual-studio
我有一个本机C++程序,它在使用Debug(F5)时运行速度慢了20多倍,但在使用start而不使用debug(Ctrl+ F5)时以正常速度运行.
无论我是使用调试还是发布版本都没关系.此外,如果我使用WinDbg,程序的速度会慢一些.
是否有一些设置我选择了错误或什么?
Cal*_*602 17
将_NO_DEBUG_HEAP环境变量设置为1(如http://preshing.com/20110717/the-windows-heap-is-slow-when-launched-from-the-debugger所示).
这也可以在Visual Studio内部完成.
现在这只是一个解决方法,我很想知道如何重构一个遭受这类问题的程序.你有很多std :: map's,shared_ptr或任何其他大的间接吗?
Han*_*ant 13
这当然不是由于在调试配置中定义了_DEBUG符号或编译代码引起的.无论调试器是否附加到程序,都会运行添加的调试代码.
调试器通常不会影响代码执行,它通过调用WaitForDebugEvent来保持不变.阻止它,直到操作系统告诉它发生了一些值得注意的事情.这可能会在调试器中触发一堆代码,从而降低程序速度.您可以看到DEBUG_EVENT结构文档中列出的事件.
在文档之外注释它们:调试器介入并在以下情况下减慢程序速度:
程序加载或卸载DLL.在加载过程中会发生很多事情,调试器会寻找调试符号文件(.pdb).它可能会联系符号服务器下载它.DLL源代码中设置的任何断点都将被激活.这可能非常慢,但效果是暂时的,通常只会减慢启动速度.您可以在"输出"窗口中看到加载/卸载通知.
该计划提出了一个例外.这会在引发异常时激活调试器,即"第一次机会通知".这可能非常有用,您可以使用Debug + Exception,Thrown复选框使调试器在引发异常时停止.您可以在"输出"窗口中看到通知消息.这确实会减慢代码的速度,从而极大地提升和捕获异常,很可能是您减速的源头.切勿使用异常进行流量控制.
线程开始运行或终止.同样,通知消息将打印到"输出"窗口.你必须创建很多线程才能使你的程序变慢.
当您的程序使用OutputDebugString()进行跟踪时.在"输出"窗口中可见.如果没有附加调试器,那么减速的另一个好选择是输出落在位桶中.你应该没有任何问题将其诊断为原因,明显的副作用是在"输出"窗口中看到很多消息.
当程序遇到断点时.没有太多理由被那个难倒.但是你可以设置断点来减慢程序的速度但不会导致调试器中断.特别是条件断点,命中计数器,过滤器和命中时操作都会很慢.使用Debug + Windows + Breakpoints查看定义的断点.
归档时间: |
|
查看次数: |
14664 次 |
最近记录: |