Как узнать адрес переменной в стеке в окне просмотра отладчика 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
Программа скомпилирована в режиме отладки.
Отладчик Visual Studio управляет просмотром отладчика, быстрым просмотром, автоматическим просмотром и просмотром локальных переменных посредством перевода, определенного схемой в файле с именем autoexp.dat (в зависимости от вашей версии VS, содержание в ней может значительно различаться). Файл находится в вашей папке VS-InstallDir / Common7 / Packages / Debugger (по крайней мере, для VS2010 и VS2012).
Зная это, пара идей для вас, чтобы попробовать / рассмотреть:
Метод первый: библиотека ноу-хау
Чтобы получить доступ к актуальным адрес первого элемента в вектор, который я в конечном итоге просто сделать это:
streets._Myfirst
если вы знаете количество элементов, которые вы собираетесь просматривать, вы можете использовать расширение расширения массива:
streets._Myfirst,N
где N
это количество элементов
Примечание: это работает только как показано выше с векторами. Практика отличается в зависимости от того, какой контейнер вы используете. Без сомнения, есть более простые способы, которые, вероятно, менее зависят от реализации std :: vector.<> Но это самая простая из всех, что я знаю, как быстро вывести вас из строя и отладить.
Метод второй: выжженная земля
В разделе Инструменты / Параметры / Отладка / Общие приведен список функций, которые можно включать и выключать. Один из них вы найдете особенно полезным для этого вопроса:
Показать необработанную структуру объектов в переменных окнах.
Поверни это НА чтобы увидеть сырые переменные-члены все структуры и контейнеры, включая стандартные контейнеры, такие как std :: vector<>. Это эффективно отключает использование шаблонов в autoexp.dat
Чтобы увидеть адрес, приведите к void *
, вот так: (void *)&streets
,
Это попытка Visual Studio быть полезной, показывая вам направленный вектор напрямую. Подобная проблема затрагивает массивы векторов.