visual studio autos c++ c visual-studio debugging

c++ - visual studio 2017 autos window



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

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?


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.


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 (Debug / Windows / Watch). Añadir reloj =

m4x4,16

Esto muestra datos en una lista:

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

m4x4

Esto muestra datos en una tabla, que es mejor para matrices de dos y tres dimensiones:

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


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 dentro, que tiene una matriz llamada Attrib dentro, debería verse así si desea tener la posición 26:

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

También puedes usar un desplazamiento

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

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


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];

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

a,su

Consulte las tablas en la página MSDN para conocer todas las conversiones posibles, ya que hay bastantes. Muchas variantes de cadenas 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 la ventana Inspección

pArray.m_pData,5

para ver los primeros 5 elementos.

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

pArray.m_pData[x].m_pData,y


Por,

int **a; //row x col

agregar esto para mirar

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


Puede encontrar una lista de muchas cosas que puede hacer con las variables en la ventana de observación en esta joya en los documentos: MSDN

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

a,10 a,su

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


Sí, simple. di que tienes

char *a = new char[10];

escribiendo en el depurador:

a,10

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


una revisita:

supongamos que tiene un puntero debajo:

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 que se muestra a continuación, y puede ver todos los contenidos de una vez.

double[5][10] a;