vs2010 отладка просмотр std::vector
От: x-code  
Дата: 23.09.14 13:34
Оценка:
Интересная вещь. Такой простой код
struct FOO { int x, y; }
std::vector<int> v1;
std::vector<FOO> v2;
v1.resize(4);
v2.resize(4);
v1[0] = 10;
v2[0].x = 20;


Если в Visual Studio 2010 поставить точку останова и открыть v1 и v2 в окне Watch, то вектор v1 прекрасно откроется — со всеми внутренними полями и самим содержимым вектора, а v2 не откроется вообще.
Если смотреть напрямую внутреннюю структуру данных вектора (то есть в данном случае v1._Myfirst и v2._Myfirst) то то же самое.
Проверял на нескольких компьютерах.
С чем это связано и как с этим бороться?
Re: vs2010 отладка просмотр std::vector
От: VladFein США  
Дата: 24.09.14 21:33
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Если в Visual Studio 2010 поставить точку останова и открыть v1 и v2 в окне Watch, то вектор v1 прекрасно откроется — со всеми внутренними полями и самим содержимым вектора, а v2 не откроется вообще.

XC>Если смотреть напрямую внутреннюю структуру данных вектора (то есть в данном случае v1._Myfirst и v2._Myfirst) то то же самое.
XC>Проверял на нескольких компьютерах.
XC>С чем это связано и как с этим бороться?

Связано с тем, как написан std::vector vizualizer в autoexp.dat, в C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger.
Как бороться — не знаю.
Re: vs2010 отладка просмотр std::vector
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.09.14 22:41
Оценка: 6 (1)
Здравствуйте, x-code, Вы писали:

XC>
XC>struct FOO { int x, y; }
XC>std::vector<int> v1;
XC>


XC> v2 не откроется вообще.


AFAIK 2010 не поддерживает нормально локальные структуры в вотче.
Вариантов несколько:

1. Проапгрейдться на 2013 например, там все показывается нормально.

2. Вынести определение спруктуры из функции наружу.

3. Писать в вотч (FOO*)&v2,10
Re[2]: vs2010 отладка просмотр std::vector
От: VladFein США  
Дата: 25.09.14 13:27
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>AFAIK 2010 не поддерживает нормально локальные структуры в вотче.

bnk>Вариантов несколько:

bnk>1. Проапгрейдться на 2013 например, там все показывается нормально.


bnk>2. Вынести определение спруктуры из функции наружу.


bnk>3. Писать в вотч (FOO*)&v2,10


Супер! Тогда:

4. Объявить FOO глобально.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.