在VS2010中禁用迭代器调试
Disable iterator debugging in VS2010
我一直想知道为什么我现在修复的应用程序在调试模式下运行得如此之慢。该比率可达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
- 提升堆元素句柄比较和 MSVC 迭代器调试工具
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- 映射/集迭代器不可取消引用 (C++) - 调试断言失败
- 为什么迭代器调试在调试版本中会减慢 std::unordered_map 200 倍?
- 启用 MSVC 调试迭代器时堆栈分配器访问冲突
- Visual Studio 2013 调试迭代器容器
- 调试断言失败映射/设置迭代器不可取消引用
- DEV-C++5.11 STL迭代器的调试问题
- 调试断言失败-矢量迭代器不可取消引用
- MSVC 2015 - 自定义迭代器的 std::for_each 中的编译器错误(仅在调试中时)
- 哪些因素使迭代器在调试模式下如此缓慢 (VC++ 2012)
- 无效迭代器:如何在第一次使用时获取一些调试信息
- 调试断言错误 - 列出不兼容的迭代器
- 调试断言失败:迭代器无效
- 调试断言失败的c++deque迭代器不可取消引用
- 调试断言失败!表达式列表迭代器不兼容
- 在VS2010中禁用迭代器调试
- 调试断言:Vector迭代器不兼容(c++)
- 列表,迭代器定义只在Eclipse调试器中进行分段
- 用std::矢量迭代器分配std::字符串在一个项目中会导致调试错误,但在另一个项目却能正常工作