Come visualizzare una matrice allocata dynamicmente nel debugger di Visual Studio?

Se si dispone di una matrice allocata staticamente, il debugger di Visual Studio può facilmente visualizzare tutti gli elementi dell’array. Tuttavia, se si dispone di un array assegnato dynamicmente e puntato da un puntatore, verrà visualizzato solo il primo elemento dell’array quando si fa clic sul + per espanderlo. C’è un modo semplice per dire al debugger, mostrami questi dati come una matrice di tipo Foo e taglia X?

Sì, semplice. dì che hai

char *a = new char[10]; 

scrivendo nel debugger:

 a,10 

mostrerebbe il contenuto come se fosse un array.

Esistono due metodi per visualizzare i dati in 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 }; 

Un modo è con una finestra di controllo (Debug / Windows / Watch). Aggiungi orologio =

 m4x4,16 

Questo visualizza i dati in un elenco:

inserisci la descrizione dell'immagine qui

Un altro modo è con una finestra di memoria (Debug / Windows / Memory). Specificare un indirizzo iniziale di memoria =

 m4x4 

Visualizza i dati in una tabella, che è migliore per le matrici a due e tre dimensioni:

inserisci la descrizione dell'immagine qui

Fare clic con il tasto destro sulla finestra Memoria per determinare come visualizzare i dati binari. Le scelte sono limitate a numeri interi, float e alcune codifiche di testo.

In una finestra di controllo, aggiungi una virgola dopo il nome dell’array e la quantità di elementi che desideri visualizzare.

una rivisitazione:

supponiamo di avere un puntatore sotto:

 double ** a; // assume 5*10 

quindi puoi scrivere qui sotto in Visual Studio debug watch:

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

che lo proietterà in un array come sotto, e potrai visualizzare tutti i contenuti in un colpo solo.

 double[5][10] a; 

Per,

 int **a; //row x col 

aggiungi questo per guardare

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

Un altro modo per farlo è specificato qui in MSDN .

In breve, è ansible visualizzare un array di caratteri come diversi tipi di stringa. Se hai un array dichiarato come:

 char *a = new char[10]; 

È ansible stamparlo come stringa unicode nella finestra di controllo con quanto segue:

 a,su 

Vedi le tabelle sulla pagina MSDN per tutte le diverse conversioni possibili poiché ce ne sono alcune. Molte varianti di stringhe diverse, varianti per stampare singoli elementi nell’array, ecc.

Per gli array MFC (CArray, CStringArray, …) dopo il collegamento successivo nel suo suggerimento # 4

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

Ad esempio per “CArray pArray”, aggiungere le windows di controllo

  pArray.m_pData,5 

per vedere i primi 5 elementi.

Se pArray è un CArray bidimensionale, puoi guardare uno qualsiasi degli elementi della seconda dimensione usando la seguente syntax:

  pArray.m_pData[x].m_pData,y 

Puoi trovare un elenco di molte cose che puoi fare con le variabili nella finestra di controllo di questo gioiello nei documenti: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

Per una variabile a, ci sono le cose già menzionate in altre risposte come

 a,10 a,su 

ma ci sono un sacco di altri specificatori per il formato e la dimensione, come:

 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) 

Non ho trovato un modo per usarlo con un array multidimensionale. Ma puoi almeno (se conosci l’indice della voce desiderata) aggiungi un orologio a un valore specifico. Basta usare l’indice-operatore.

Per un array denominato current, che ha all’interno un array denominato Attribs, che ha all’interno un array chiamato Attrib, dovrebbe apparire come questo se ti piace avere la posizione 26:

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

Puoi anche usare un offset

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

mostrerà i suoi “prossimi” 25 elementi. (Sto usando VS2008, questo mostra solo 25 elementi al massimo).