2008-09-16 19 views
125

Si tiene una matriz estáticamente asignada, 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 alguna manera fácil de decirle al depurador, muéstreme esta información como una matriz de tipo Foo y tamaño X?¿Cómo mostrar una matriz dinámicamente asignada en el depurador de Visual Studio?

Respuesta

169

Sí, simple. decir que tiene

char *a = new char[10]; 

escribir en el depurador:

a,10 

que mostraría el contenido como si se tratara de una matriz.

+9

Eso es un gran truco, pero si sus puntos de puntero a una matriz de estructuras, he encontrado que los elementos individuales ampliados con "una , 10 "en la ventana del reloj no son expandibles. Lo que significa que no puedes cavar en el tercer elemento de la matriz usando este método. ¿Es eso algo que se puede superar? – SirPentor

+0

@SirPentor Tengo el mismo problema. ¿Has encontrado una solución? – becko

+0

@ becko - negatory. Es frustrante. – SirPentor

19

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

0

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 actual, que tiene una matriz llamada attribs el interior, que tiene un nombre Attrib matriz en el interior, que debe ser similar esto si le gustaría tener en la posición 26:

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

También puede utilice un desplazamiento

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

mostrará ne "próximos" 25 elementos. (Estoy usando VS2008, esto muestra solo 25 elementos como máximo).

1

Para bloques de MFC (CArray, CStringArray, ...) siguientes al siguiente eslabón de su Consejo # 4

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

Por ejemplo, para "CArray pArray", añaden en las ventanas del reloj

 pArray.m_pData,5 

para ver los primeros 5 elementos.

Si pArray es una de dos dimensiones CArray se puede ver en cualquiera de los elementos de la segunda dimensión utilizando la siguiente sintaxis:

 pArray.m_pData[x].m_pData,y 
9

una visita de seguimiento:

supongamos que tiene un puntero a continuación:

double ** a; // assume 5*10 

entonces usted puede escribir a continuación en el reloj de depuración de Visual Studio:

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

que lo convertirá en una matriz como la que se muestra a continuación, y puede ver todos los contenidos de una vez.

double[5][10] a; 
27

Hay dos métodos para ver los 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 manera es con una ventana Watch (depuración/Windows/Watch). Añadir reloj =

m4x4,16 

Esta muestra los datos en una lista:

enter image description here

Otra forma es con una ventana de memoria (Depuración/Windows/memoria). Especificar una dirección de inicio de memoria =

m4x4 

Esta muestra los datos en una tabla, que es mejor para los dos y matrices tridimensionales:

enter image description here

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

4

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

En resumen, puede mostrar una matriz de caracteres como varios tipos de cadena. Si usted tiene una matriz declarada como:

char *a = new char[10]; 

puede imprimir como una cadena Unicode en la ventana de inspección con lo siguiente:

a,su 

Ver las tablas de la página de MSDN para todos las diferentes conversiones posibles, ya que hay bastantes. Muchos diferentes variantes de la secuencia, las variantes para imprimir los elementos individuales de la matriz, etc.

+1

Desde el enlace de MSDN que entregó - 'a, [10]' le permite ver elementos individuales para que ellos mismos sean expandibles, incluso si tiene una CArray de tipos de datos complejos. – LThode

1

Puede encontrar una lista de muchas cosas que puede hacer con las variables de la ventana de inspección en esta joya en la documentación: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

para una variable a, existen 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) 
3

Para,

int **a; //row x col 

añadir esto a ver

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