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?
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.
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:
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:
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.
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.
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;
Por,
int **a; //row x col
agrega esto para ver
(int(**)[col])a,row
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.
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
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)
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).