Visual Studio Debugger Watch проблемы

Как узнать адрес переменной в стеке в окне просмотра отладчика Visual Studio (или в другом месте?)

Чтение переменной отлично работает:

streets     streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

Но с префиксом & не дает мне адрес:

&streets        streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

Кроме того, попытка прочитать размер не работает, почему это так?

streets.size()  CXX0075: Error: Cannot set up Function Evaluation

Программа скомпилирована в режиме отладки.

2

Решение

Отладчик Visual Studio управляет просмотром отладчика, быстрым просмотром, автоматическим просмотром и просмотром локальных переменных посредством перевода, определенного схемой в файле с именем autoexp.dat (в зависимости от вашей версии VS, содержание в ней может значительно различаться). Файл находится в вашей папке VS-InstallDir / Common7 / Packages / Debugger (по крайней мере, для VS2010 и VS2012).

Зная это, пара идей для вас, чтобы попробовать / рассмотреть:

Метод первый: библиотека ноу-хау

Чтобы получить доступ к актуальным адрес первого элемента в вектор, который я в конечном итоге просто сделать это:

streets._Myfirst

если вы знаете количество элементов, которые вы собираетесь просматривать, вы можете использовать расширение расширения массива:

streets._Myfirst,N

где N это количество элементов

Примечание: это работает только как показано выше с векторами. Практика отличается в зависимости от того, какой контейнер вы используете. Без сомнения, есть более простые способы, которые, вероятно, менее зависят от реализации std :: vector.<> Но это самая простая из всех, что я знаю, как быстро вывести вас из строя и отладить.


Метод второй: выжженная земля

В разделе Инструменты / Параметры / Отладка / Общие приведен список функций, которые можно включать и выключать. Один из них вы найдете особенно полезным для этого вопроса:

Показать необработанную структуру объектов в переменных окнах.

Поверни это НА чтобы увидеть сырые переменные-члены все структуры и контейнеры, включая стандартные контейнеры, такие как std :: vector<>. Это эффективно отключает использование шаблонов в autoexp.dat

5

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

Чтобы увидеть адрес, приведите к void *, вот так: (void *)&streets,

Это попытка Visual Studio быть полезной, показывая вам направленный вектор напрямую. Подобная проблема затрагивает массивы векторов.

4

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