Как отобразить динамически выделяемый массив в отладчике Visual Studio?

Если у вас есть статически распределенный массив, отладчик Visual Studio может легко отобразить все элементы массива. Однако, если у вас есть массив, выделяемый динамически и на который указывает указатель, он будет отображать только первый элемент массива, когда вы щелкните +, чтобы развернуть его. Есть ли простой способ сказать отладчику, показать мне эти данные в виде массива типа Foo и размера X?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
150
0
58 945
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Да просто. скажи, что у тебя есть

char *a = new char[10];

запись в отладчике:

a,10

покажет вам контент, как если бы это был массив.

Это отличный трюк, но если ваш указатель указывает на массив структур, я обнаружил, что отдельные элементы, раскрытые с помощью «a, 10» в окне просмотра, сами по себе не расширяются. Это означает, что вы не можете копаться в 3-м элементе массива с помощью этого метода. Это то, что можно преодолеть?

SirPentor 11.05.2012 22:20

@SirPentor У меня такая же проблема. Вы нашли решение?

becko 22.08.2012 23:43

@ becko - отрицательный. Это расстраивает.

SirPentor 23.08.2012 05:51

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

Icebone1000 16.02.2014 20:41

Для новичков: если вы выберете переменную «a», щелкните правой кнопкой мыши и добавьте ее в список наблюдения (проверьте), если вы откроете представление отладчика в списке наблюдаемых значений (я не могу найти имя окна прямо сейчас), вы можно дважды щелкнуть «a» и переименовать его в «a, X», где X - количество элементов. Теперь вы увидите все значения.

darkgaze 19.05.2017 19:02

Кто-нибудь знает, как использовать ту же функцию в Visual Studio Code IDE для C++.

kapilgm 25.11.2019 04:35

В окне просмотра добавьте запятую после имени массива и количества элементов, которые вы хотите отобразить.

Я не нашел способа использовать это с многомерным массивом. Но вы можете по крайней мере (если вы знаете индекс нужной записи) добавить часы к определенному значению. Просто используйте индекс-оператор.

Для массива с именем current, внутри которого есть массив с именем Attribs, внутри которого есть массив с именем Attrib, он должен выглядеть следующим образом, если вы хотите разместить позицию 26:

((*((*current).Attribs)).Attrib)[26]

Вы также можете использовать смещение

((*((*current).Attribs)).Attrib)+25

покажет ne "следующие" 25 элементов. (Я использую VS2008, он показывает максимум 25 элементов).

Для массивов MFC (CArray, CStringArray, ...) переходя по следующей ссылке в его Совете №4

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

Например, для «CArray pArray» добавьте в окнах просмотра

     pArray.m_pData,5 

чтобы увидеть первые 5 элементов.

Если pArray представляет собой двумерный массив CArray, вы можете просмотреть любой из элементов второго измерения, используя следующий синтаксис:

     pArray.m_pData[x].m_pData,y

повторный визит:

предположим, что у вас есть указатель ниже:

double ** a; // assume 5*10

тогда вы можете написать ниже в часах отладки Visual Studio:

(double(*)[10]) a[0],5

который преобразует его в массив, как показано ниже, и вы можете просмотреть все содержимое за один раз.

double[5][10] a;

Есть два метода просмотра данных в массиве m4x4:

float m4x4[16] = {
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

Один из способов - использовать окно Watch (Debug / Windows / Watch). Добавить часы =

m4x4,16

Это отображает данные в виде списка:

Другой способ - с окном памяти (Debug / Windows / Memory). Укажите начальный адрес памяти =

m4x4

Это отображает данные в таблице, что лучше для двух- и трехмерных матриц:

Щелкните правой кнопкой мыши окно «Память», чтобы определить, как визуализируются двоичные данные. Выбор ограничен целыми числами, числами с плавающей запятой и некоторыми текстовыми кодировками.

Еще один способ сделать это указан здесь в MSDN.

Короче говоря, вы можете отображать символьный массив как несколько типов строк. Если у вас есть массив, объявленный как:

char *a = new char[10];

Вы можете распечатать его как строку Unicode в окне просмотра следующим образом:

a,su

См. Таблицы на странице MSDN для всех возможных преобразований, поскольку их довольно много. Множество различных вариантов строк, вариантов печати отдельных элементов в массиве и т. д.

Из предоставленной вами ссылки MSDN - a,[10] позволяет вам видеть отдельные элементы, так что они сами могут быть расширены, даже если у вас есть CArray сложных типов данных.

LThode 05.05.2015 17:10

Вы можете найти список многих вещей, которые вы можете делать с переменными в окне просмотра в этом драгоценном камне, в документации: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

Для переменной a есть вещи, уже упомянутые в других ответах, например

a,10 
a,su 

но есть много других спецификаторов формата и размера, например:

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)

За,

int **a; //row x col

добавить это, чтобы смотреть

(int(**)[col])a,row

Скажите, пожалуйста, не могу найти "часы". Где это находится?

Egor Randomize 21.04.2019 15:48

Другие вопросы по теме