Если у вас есть статически распределенный массив, отладчик Visual Studio может легко отобразить все элементы массива. Однако, если у вас есть массив, выделяемый динамически и на который указывает указатель, он будет отображать только первый элемент массива, когда вы щелкните +, чтобы развернуть его. Есть ли простой способ сказать отладчику, показать мне эти данные в виде массива типа Foo и размера X?
Да просто. скажи, что у тебя есть
char *a = new char[10];
запись в отладчике:
a,10
покажет вам контент, как если бы это был массив.
@SirPentor У меня такая же проблема. Вы нашли решение?
@ becko - отрицательный. Это расстраивает.
вау, это бесполезно для структур, вы можете видеть только имена переменных, а не значения
Для новичков: если вы выберете переменную «a», щелкните правой кнопкой мыши и добавьте ее в список наблюдения (проверьте), если вы откроете представление отладчика в списке наблюдаемых значений (я не могу найти имя окна прямо сейчас), вы можно дважды щелкнуть «a» и переименовать его в «a, X», где X - количество элементов. Теперь вы увидите все значения.
Кто-нибудь знает, как использовать ту же функцию в Visual Studio Code IDE для C++.
В окне просмотра добавьте запятую после имени массива и количества элементов, которые вы хотите отобразить.
Я не нашел способа использовать это с многомерным массивом. Но вы можете по крайней мере (если вы знаете индекс нужной записи) добавить часы к определенному значению. Просто используйте индекс-оператор.
Для массива с именем 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 сложных типов данных.
Вы можете найти список многих вещей, которые вы можете делать с переменными в окне просмотра в этом драгоценном камне, в документации: 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
Скажите, пожалуйста, не могу найти "часы". Где это находится?
Это отличный трюк, но если ваш указатель указывает на массив структур, я обнаружил, что отдельные элементы, раскрытые с помощью «a, 10» в окне просмотра, сами по себе не расширяются. Это означает, что вы не можете копаться в 3-м элементе массива с помощью этого метода. Это то, что можно преодолеть?