¿Cómo mostrar una matriz asignada dinámicamente en el depurador de Visual Studio?


Si tiene una matriz asignada estáticamente, el depurador de Visual Studio puede mostrar fácilmente todos los elementos de la matriz. Sin embargo, si tiene una matriz asignada dinámicamente y apuntada por un puntero, solo mostrará el primer elemento de la matriz cuando haga clic en + para expandirla. ¿Hay una manera fácil de decirle al depurador, mostrarme estos datos como una matriz de tipo Foo y tamaño X?

Author: Gilles, 2008-09-16

9 answers

Sí, simple. digamos que tienes

char *a = new char[10];

Escribiendo en el depurador:

a,10

Le mostraría el contenido como si fuera un array.

 177
Author: shoosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-18 08:42:26

Hay dos métodos para ver datos en un array 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
};

Una forma es con una ventana de vigilancia (Debug/Windows/Watch). Añadir watch =

m4x4,16

Esto muestra los datos en una lista:

introduzca la descripción de la imagen aquí

Otra forma es con una ventana de memoria (Debug/Windows/Memory). Especifique una dirección de inicio de memoria =

m4x4

Esto muestra los datos en una tabla, que es mejor para matrices bidimensionales y tridimensionales:

introduzca la descripción de la imagen aquí

Haga clic con el botón derecho en la ventana de memoria para determinar cómo se visualizan los datos binarios. Las opciones están limitadas a enteros, flotadores y algunas codificaciones de texto.

 31
Author: Riaz Rizvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 16:25:10

En una ventana de vigilancia, agregue una coma después del nombre de la matriz y la cantidad de elementos que desea que se muestren.

 20
Author: Drealmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 18:06:29

Una revisita:

Supongamos que tiene un puntero a continuación:

double ** a; // assume 5*10

Luego puede escribir a continuación en Visual Studio debug watch:

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

Que lo lanzará en una matriz como la siguiente, y puede ver todos los contenidos de una sola vez.

double[5][10] a;
 9
Author: Gengpu Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-07 01:29:11

Para,

int **a; //row x col

Añadir esto para ver

(int(**)[col])a,row
 5
Author: vicky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-09 04:28:36

Otra forma de hacer esto se especifica aquí en MSDN.

En resumen, puede mostrar una matriz de caracteres como varios tipos de cadena. Si tienes un array declarado como:

char *a = new char[10];

Puede imprimirlo como una cadena unicode en la ventana del reloj con lo siguiente:

a,su

Vea las tablas en la página de MSDN para todas las diferentes conversiones posibles, ya que hay bastantes. Muchas variantes de cadena diferentes, variantes para imprimir elementos individuales en la matriz, sucesivamente.

 4
Author: Taylor Price,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-10 20:12:17

Para matrices MFC (CArray, CStringArray,...) siguiendo el siguiente enlace en su Tip # 4

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

Por ejemplo, para "CArray pArray", agregue las ventanas del reloj

     pArray.m_pData,5 

Para ver los primeros 5 elementos .

Si pArray es un CArray bidimensional, puede mirar cualquiera de los elementos de la segunda dimensión usando la siguiente sintaxis:

     pArray.m_pData[x].m_pData,y
 1
Author: dabinsi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-08 16:03:01

Puede encontrar una lista de muchas cosas que puede hacer con las variables en la ventana ver en esta gema en los documentos: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

Para una variable a, hay las cosas ya mencionadas en otras respuestas como

a,10 
a,su 

Pero hay un montón de otros especificadores de formato y tamaño, como:

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)
 1
Author: Legolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-07 07:44:30

No he encontrado una manera de usar esto con una matriz multidimensional. Pero al menos puede (si conoce el índice de su entrada deseada) agregar un reloj a un valor específico. Simplemente use el operador de índice.

Para una matriz llamada current, que tiene una Matriz llamada Attribs dentro, que tiene una Matriz llamada Attrib dentro, debería tener este aspecto si desea tener la posición 26:

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

También puede utilizar un desplazamiento

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

Mostrará ne "next" 25 elementos. (Estoy usando VS2008, esto muestra solo 25 elementos máximo).

 0
Author: wog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-18 13:15:19