2015-10-08 114 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的東西。也許這不是無限循環,只是很長的一個,因爲這個項目相當龐大。 –