2015-10-08 152 views
1

我一直在想,为什么应用程序我现在正在修复运行,所以在调试模式下运行速度相对于发行版来说太慢了。该比率可高达600倍,其中500ms运行需要5分钟。在VS2010中禁用迭代器调试

我已经放弃了可用于windows的任何profiler,他们都有一些属性,使他们吸吮,无论是崩溃,没有加载符号...所以我决定从统计。我用暂停按钮随机暂停执行。这段代码片段在我暂停时大部分时间出现:

#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_LEVEL2

现在我会张贴在_HAS_ITERATOR_DEBUGGING被设置代码(编辑:这是文件Microsoft Visual Studio 10.0\VC\include\yvals.h),但是当我去项目属性-> C/C++ -> Preprocesor并添加_HAS_ITERATOR_DEBUGGING=0,在Visual Studio进入死循环我必须杀掉devenv.exe

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


VS版本信息:

Microsoft Visual Studio 2010 
Version 10.0.40219.1 SP1Rel 
+0

您可以从断点窗口将断点导出到文件。所以你不必一次又一次手动设置它们。我无法在VS10中的简单测试项目中重现此错误,因此它看起来要么取决于您的项目,要么取决于您的VS更新。你有没有安装VS10 SP1? – Ari0nhh

+0

@ Ari0nhh这可能取决于项目的确。我不是作者,所以我很迷茫。我想我需要有人告诉我我应该寻找什么。我用visual studio版本信息更新了我的问题。它具有SP1和Microsoft自动更新服务的多个更新。 –

+0

您是否尝试禁用所有插件/扩展? – typ1232

回答

-1

在设置你的预处理器选项0123中的

+0

同样的效果。大失望,因为我再次失去了我的工作空间和断点。 –

+0

适用于我(VS2010使用'std :: vector ')。我想你的问题是不同的。 –

+0

我不是该项目的作者,但我想它一定是Visual Studio的东西。也许这不是无限循环,只是很长的一个,因为这个项目相当庞大。 –