как отобразить динамически размещенный массив в отладчике visual studio?

<p>если у вас статически распределенный массив, отладчик visual studio может легко отобразить все элементы массива. однако, если у вас есть массив, выделенный динамически и на который указывает указатель, он будет отображать только первый элемент массива, когда вы нажмете +, чтобы развернуть его. есть ли простой способ сказать отладчику, показать мне эти данные в виде массива типа foo и размера x?</p>

<p>да просто. скажи, что у тебя есть</p><pre><code>char *a = new char[10]; </code></pre><p>запись в отладчике:</p><pre><code>a,10 </code></pre><p>покажет вам содержимое, как если бы это был массив.</p>

<p>есть два способа просмотра данных в массиве m4x4:</p><pre><code>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 }; </code></pre><p>одним из способов является окно просмотра (отладка/windows/watch). добавить часы =</p><pre><code>m4x4,16 </code></pre><p>это отображает данные в списке:</p><p><img src="https://i.stack.imgur.com/k54sj.png" alt="enter image description here"></p><p>другой способ - с помощью окна памяти (отладка/windows/память). укажите начальный адрес памяти =</p><pre><code>m4x4 </code></pre><p>это отображает данные в таблице, которая лучше для двух и трехмерных матриц:</p><p><img src="https://i.stack.imgur.com/kbbei.png" alt="enter image description here"></p><p>щелкните правой кнопкой мыши в окне "память", чтобы определить способ визуализации двоичных данных. выбор ограничен целыми числами, числами с плавающей точкой и некоторыми кодировками текста.</p>

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

<p>повторное посещение:</p><p>давайте предположим, что у вас есть указатель ниже:</p><pre><code>double ** a; // assume 5*10 </code></pre><p>тогда вы можете написать ниже в visual studio отладочные часы:</p><pre><code>(double(*)[10]) a[0],5 </code></pre><p>который преобразует его в массив, как показано ниже, и вы можете просмотреть все содержимое за один раз.</p><pre><code>double[5][10] a; </code></pre>

<p>за,</p><pre><code>int **a; //row x col </code></pre><p>добавить это, чтобы посмотреть</p><pre><code>(int(**)[col])a,row </code></pre>

<p>еще один способ сделать это указан здесь в <a href="https://msdn.microsoft.com/en-us/library/75w45ekt.aspx">msdn</a> .</p><p>короче говоря, вы можете отобразить массив символов в виде нескольких типов строк. если у вас есть массив, объявленный как:</p><pre><code>char *a = new char[10]; </code></pre><p>вы можете напечатать его в виде строки unicode в окне просмотра со следующим:</p><pre><code>a,su </code></pre><p>см. таблицы на странице msdn для всех возможных преобразований, поскольку их довольно много. много разных строковых вариантов, варианты печати отдельных элементов в массиве и т.д.</p>

<p>для массивов mfc (carray, cstringarray, ...) перейдите по следующей ссылке в совете № 4</p><p> <a href="http://www.codeproject.com/articles/469416/10-more-visual-studio-debugging-tips-for-native-de">http://www.codeproject.com/articles/469416/10-more-visual-studio-debugging-tips-for-native-de</a> </p><p>например, для "carray parray", добавьте в окнах просмотра</p><pre><code> parray.m\_pdata,5 </code></pre><p>чтобы увидеть первые 5 элементов.</p><p>если parray - двумерный carray, вы можете посмотреть на любой из элементов второго измерения, используя следующий синтаксис:</p><pre><code> parray.m\_pdata[x].m\_pdata,y </code></pre>

<p>вы можете найти список многих вещей, которые вы можете сделать с переменными, в окне просмотра этого драгоценного камня в документации: <a href="https://msdn.microsoft.com/en-us/library/75w45ekt.aspx">https://msdn.microsoft.com/en-us/library/75w45ekt.aspx</a> </p><p>для переменной а есть вещи, уже упомянутые в других ответах, такие как</p><pre><code>a,10 a,su </code></pre><p>но есть много других спецификаторов для формата и размера, таких как:</p><pre><code>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) </code></pre>

<p>я не нашел способ использовать это с многомерным массивом. но вы можете по крайней мере (если вы знаете индекс нужной вам записи) добавить часы к определенному значению. просто используйте индекс-оператор.</p><p>для массива с именем current, в котором есть массив с именем attribs, внутри которого находится массив с именем attrib, он должен выглядеть следующим образом, если вы хотите расположить 26:</p><pre><code>((*((*current).attribs)).attrib)[26] </code></pre><p>вы также можете использовать смещение</p><pre><code>((*((*current).attribs)).attrib)+25 </code></pre><p>покажет не "следующие" 25 элементов. (я использую vs2008, это показывает только 25 элементов максимум).</p>