it-swarm-es.tech

¿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 señalada por un puntero, solo mostrará el primer elemento de la matriz cuando haga clic en el signo + para expandirla. ¿Hay una forma fácil de decirle al depurador que me muestre estos datos como una matriz de tipo Foo y tamaño X?

139
Adam Rosenfield

Si simple di que tienes

char *a = new char[10];

escribiendo en el depurador:

a,10

te mostraría el contenido como si fuera una matriz.

184
shoosh

Hay dos métodos para ver datos en una matriz 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 (Depurar/Windows/Ver). Añadir reloj =

m4x4,16

Esto muestra los datos en una lista:

enter image description here

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

m4x4

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

enter image description here

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.

32
Riaz Rizvi

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

21
Drealmer

una revisión:

supongamos que tiene un puntero a continuación:

double ** a; // assume 5*10

a continuación, puede escribir a continuación en Visual Studio Debug Watch:

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

que lo convertirá en una matriz como la de abajo, y podrá ver todos los contenidos de una sola vez.

double[5][10] a;
10
Gengpu Liu

Por,

int **a; //row x col

agrega esto para ver

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

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 una matriz declarada como:

char *a = new char[10];

Podría imprimirlo como una cadena Unicode en la ventana de visualización con lo siguiente:

a,su

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

4
Taylor Price

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

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

Por ejemplo, para "CArray pArray", agregue en las ventanas de Vigilancia

     pArray.m_pData,5 

para ver los primeros 5 elementos.

Si pArray es una 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
dabinsi

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

Para una variable a, están las cosas ya mencionadas en otras respuestas como

a,10 
a,su 

pero hay muchos otros especificadores para el 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
Legolas

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

Para un Array llamado current, que tiene un Array llamado Attribs en su interior, que tiene un Array llamado Attrib en su interior, debería tener este aspecto si desea tener la posición 26:

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

También puedes usar un offset.

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

mostrará los "siguientes" 25 elementos. (Estoy usando VS2008, esto muestra solo 25 elementos máximo).

0
wog