Se si dispone di un array allocato staticamente, il debugger di Visual Studio può visualizzare facilmente tutti gli elementi dell'array. Tuttavia, se un array è allocato in modo dinamico e puntato da un puntatore, verrà visualizzato il primo elemento dell'array solo quando si fa clic su + per espanderlo. C'è un modo semplice per dire al debugger, mostrarmi questi dati come una matrice di tipo Foo e dimensione X?
Sì, semplice dire che hai
char *a = new char[10];
scrivendo nel debugger:
a,10
ti 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 Watch (Debug/Windows/Watch). Aggiungi watch =
m4x4,16
Questo visualizza i dati in un elenco:
Un altro modo è con una finestra Memory (Debug/Windows/Memory). Specificare un indirizzo iniziale di memoria =
m4x4
Visualizza i dati in una tabella, che è meglio per le matrici bidimensionali e tridimensionali:
Fare clic con il tasto destro sulla finestra Memoria per determinare la modalità di visualizzazione dei dati binari. Le scelte sono limitate a numeri interi, float e alcune codifiche di testo.
In una finestra di controllo, aggiungere una virgola dopo il nome dell'array e la quantità di elementi che si desidera visualizzare.
una rivisitazione:
supponiamo che tu abbia un puntatore di seguito:
double ** a; // assume 5*10
quindi puoi scrivere qui sotto nel debug di Visual Studio:
(double(*)[10]) a[0],5
che lo proietta in un array come sotto, e puoi vedere tutti i contenuti in una volta sola.
double[5][10] a;
Per,
int **a; //row x col
aggiungi questo per guardare
(int(**)[col])a,row
Ancora un altro modo per farlo è specificato qui in MSDN .
In breve, è possibile visualizzare una matrice di caratteri come diversi tipi di stringa. Se hai un array dichiarato come:
char *a = new char[10];
È possibile stamparlo come stringa unicode nella finestra di controllo con quanto segue:
a,su
Vedi le tabelle nella pagina MSDN per tutte le diverse conversioni possibili poiché ce ne sono alcune. Molte varianti di stringa diverse, varianti per stampare singoli elementi nell'array, ecc.
Per gli array MFC (CArray, CStringArray, ...) seguendo il collegamento successivo nel suo Suggerimento n. 4
http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De
Ad esempio per "CArray pArray", aggiungi nelle finestre 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 sintassi successiva:
pArray.m_pData[x].m_pData,y
Puoi trovare un elenco di molte cose che puoi fare con le variabili nella finestra dell'orologio in 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 molti altri specificatori per formato e dimensioni, 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 il modo di usarlo con un array multidimensionale. Ma puoi almeno (se conosci l'indice della voce desiderata) aggiungere un orologio a un valore specifico. Usa semplicemente l'operatore indice.
Per una matrice denominata corrente, che ha una matrice denominata Attribs all'interno, con una matrice denominata Attrib all'interno, dovrebbe apparire così se si desidera posizionare 26:
((*((*current).Attribs)).Attrib)[26]
Puoi anche usare un offset
((*((*current).Attribs)).Attrib)+25
mostrerà ne "prossimi" 25 elementi. (Sto usando VS2008, questo mostra solo 25 elementi al massimo).