在VS2010中禁用迭代器调试

时间:2015-10-08 13:25:20

标签: c++ visual-studio-2010

我一直想知道为什么我现在正在修复的应用程序在调试模式下运行得如此缓慢。该比率最高可达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.0\VC\include\yvals.h ),但是当我转到项目属性->时C / C ++ ->预处理器并添加_HAS_ITERATOR_DEBUGGING=0,Visual Studio进入无限循环,我必须终止进程{​​{1}}。

幸运的是,我没有未保存的更改(断点除外)。为什么会发生这种情况以及如何解决这个问题?许多功能无法在调试模式下进行测试,因为它可能需要几年时间。

VS版本信息:

devenv.exe

2 个答案:

答案 0 :(得分:-1)

此链接表示您不应该直接控制此宏:

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

尝试设置_ITERATOR_DEBUG_LEVEL=0

答案 1 :(得分:-1)

_ITERATOR_DEBUG_LEVEL=0

中的预处理器选项集Preprocessor Definitions