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
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.
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.
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).
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
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;
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:
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:
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.
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.
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
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)
Para,
int **a; //row x col
añadir esto a ver
(int(**)[col])a,row
- 1. ¿Ver matriz en el depurador de Visual Studio?
- 2. sizeof con una matriz asignada dinámicamente
- 3. ¿Cómo pasar una matriz 2D dinámicamente asignada a una función?
- 4. tamaño de la matriz dinámicamente asignada
- 5. Encontrar el tamaño de la matriz dinámicamente asignada
- 6. ¿Cómo redirecciono el resultado del depurador de Visual Studio?
- 7. Depurador de Visual Studio 2010 omitiendo
- 8. Depurador de Visual Studio - Visualización de valores enteros en Hex
- 9. Salga de un bucle en el depurador de Visual Studio
- 10. Depurar el ensamblado cargado dinámicamente en Visual Studio .NET
- 11. visual studio 2008 depurador loco omitiendo!
- 12. C++ memoria asignada dinámicamente
- 13. ¿Cómo mostrar el esquema del código en Visual Studio?
- 14. Cómo asegurar que una matriz dinámicamente asignada sea privada en openmp
- 15. Visual Studio: ¿evita que F11 inicie el depurador?
- 16. Cómo adjuntar un depurador dinámicamente a un proceso específico
- 17. ¿Qué significa cuando una variable aparece en rojo en el depurador de Visual Studio C++?
- 18. ¿Hay alguna manera de inicializar estáticamente una matriz asignada dinámicamente en C++?
- 19. Depuración Javascript en Visual Studio (u otro depurador JS)
- 20. Cómo escribir una DLL de visualizador nativa personalizada para Visual Studio 2012 depurador?
- 21. Continuando en el depurador de Visual Studio después de que ocurra una excepción
- 22. Determinar el tamaño de la memoria asignada dinámicamente en C
- 23. Pasar argumentos al depurador XSLT de Visual Studio
- 24. ¿Cómo observar los objetos de mapa de bits en el depurador de Visual Studio?
- 25. Visual Studio: ¿cómo puedo detener el depurador cuando se modifica una variable miembro?
- 26. ¿Puedo crear una macro de Visual Studio para iniciar un proyecto específico en el depurador?
- 27. Observación de una matriz C++ en Visual Studio
- 28. ¿Cómo asigna dinámicamente una matriz?
- 29. desenganche un proceso de depurador de Visual Studio
- 30. Depurador de Visual Studio C++: ¿Sin volcado hexadecimal?
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
@SirPentor Tengo el mismo problema. ¿Has encontrado una solución? – becko
@ becko - negatory. Es frustrante. – SirPentor