Функционально-локальная структура ломает визуализаторы отладки STL в Visual Studio?

Когда структура / класс находится за пределами функции:

#include <vector>
struct Foo { };
int main()
{
std::vector< Foo > foos;
return 0;
}

Ручки визуализатора отладки STL в Visual Studio 2012 foos просто хорошо:

Name                    Value               Type
-       foos            { size=0 }          std::vector<Foo,std::allocator<Foo> >
[size]      0                   int
[capacity]  0                   int
+       [Raw View]  0x0026fbcc {...}    std::vector<Foo,std::allocator<Foo> > *

Но когда Foo это внутри main():

#include <vector>
int main()
{
struct Foo { };
std::vector< Foo > foos;
return 0;
}

Отладчик выплевывает типы / значения мусора (?), Которые выглядят как искажение имен, которые были ужасно неправильными:

Name                                                                                                            Value                                                                           Type
-       foos                                                                                                    {...}                                                                           std::?$vector@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@
-       std::?$_Vector_alloc@$0A@U?$_Vec_base_types@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@@std@@     {...}                                                                           std::?$_Vector_alloc@$0A@U?$_Vec_base_types@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@@std@@
-       std::?$_Vector_val@U?$_Simple_types@UFoo@?1?main@@std@@                                         {_Myfirst=0x00000000 {...}  _Mylast=0x00000000 {...} _Myend=0x00000000 {...} }  std::?$_Vector_val@U?$_Simple_types@UFoo@?1?main@@std@@
std::_Container_base0                                                                       {...}                                                                           std::_Container_base0
_Myfirst                                                                                    0x00000000 {...}                                                                main::__l2::Foo *
_Mylast                                                                                     0x00000000 {...}                                                                main::__l2::Foo *
_Myend                                                                                      0x00000000 {...}                                                                main::__l2::Foo *

Два вопроса:

  • Что тут происходит?
  • Какие-либо исправления / обходные пути? (… кроме очевидного «хода Foo вне main()«)

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]