2009-10-30 11 views
11

consideri il seguente esempio:Come "guardare" un array dinamico C++ usando gdb?

int size = 10, *kk = new int[size]; 

for (int i = 0; i < size; i++) { 
    kk[i] = i; 
} 

delete [] kk; 

Come posso aggiungere un orologio per l'intero array? Posso aggiungere un orologio uno per uno (kk [0], kk [1] ...), ma poiché so che la lunghezza dell'array è un modo per farlo automaticamente? Intendo qualcosa come kk [0..size-1] o così.

Sto usando NetBeans IDE insieme a cygwin g ++ e gdb.

+1

Impiegato Modifica russa modifica leggermente il significato della domanda, ma il @ in un'espressione funziona sia per i comandi di visualizzazione che per quelli di stampa. – mkb

+0

Vuoi guardarlo (interrompere la lettura/scrittura) o stamparlo quando GDB si arresta? –

+0

guardare (pausa) su tutta la gamma: http://stackoverflow.com/questions/11004374/watch-a-memory-range-in-gdb –

risposta

11

Prova display *[email protected]<size> Dal documento per il comando di stampa:

@ è un operatore binario per il trattamento di dati consecutivi oggetti ovunque in memoria come un array. FOO @ NUM fornisce un array il cui primo elemento è FOO, il cui secondo elemento è memorizzato nello spazio successivo a dove FOO è memorizzato, ecc. FOO deve essere un'espressione il cui valore risiede nella memoria.

+0

Nice! Questo è quello che volevo :). http://bit.ly/4yYT4V – Keiji

+0

Preferisco usare p invece di "display", in quanto è più facile da digitare. L'ho aggiunto come risposta separata qui. – PlagueHammer

+1

"print" e "display" non sono lo stesso comando. "display" imposta un orologio su una variabile in modo da vederlo ogni volta che viene visualizzato un prompt, assumendo che la variabile sia in ambito. – mkb