在VS2010中禁用迭代器调试

Disable iterator debugging in VS2010

本文关键字:迭代器 调试 VS2010      更新时间:2023-10-16

我一直想知道为什么我现在修复的应用程序在调试模式下运行得如此之慢。该比率可达600倍,其中500ms的操作需要5分钟。

我已经放弃了任何可用于windows的分析器,它们都有一些使它们糟糕的属性,可能是崩溃,不加载符号……所以我决定对进行统计分析。我使用暂停按钮随机暂停执行。这段代码片段在我暂停的大部分时间都出现了:

#if _ITERATOR_DEBUG_LEVEL == 2
         if (_Myproxy != 0)
                {      // adopted, remove self from list
                _Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
                while (*_Pnext != 0 && *_Pnext != this)
                       _Pnext = &(*_Pnext)->_Mynextiter;
                if (*_Pnext == 0)
                       _DEBUG_ERROR("ITERATOR LIST CORRUPTED!");
                *_Pnext = _Mynextiter;
                _Myproxy = 0;
                }
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */

这是一个Visual Studio文件。我跟踪了_ITERATOR_DEBUG_LEVEL是如何定义的,并揭示了将_HAS_ITERATOR_DEBUGGING设置为零将阻止_ITERATOR_DEBUG_LEVEL成为2

现在我会发布_HAS_ITERATOR_DEBUGGING正在设置的代码(编辑:它的文件Microsoft Visual Studio 10.0VCincludeyvals.h ),但是当我去项目属性-> C/c++ ->预处理器并添加_HAS_ITERATOR_DEBUGGING=0时,Visual Studio进入无限循环,我必须杀死进程devenv.exe

幸运的是,我没有未保存的更改(除了断点)。为什么会发生这种情况?如何解决?许多特性不能在调试模式下测试,因为这可能需要几年的时间。


VS版本信息

Microsoft Visual Studio 2010
Version 10.0.40219.1 SP1Rel

这个链接说明你不应该直接控制这个宏:

https://msdn.microsoft.com/en-us/library/aa985939.aspx?f=255& MSPPError = -2147217396

尝试设置_ITERATOR_DEBUG_LEVEL=0

在预处理器选项中将_ITERATOR_DEBUG_LEVEL=0设置为Preprocessor Definitions