2013-07-30 9 views
5

Vorrei dichiarare una variabile convenienza array, come ad esempioÈ possibile dichiarare una variabile di convenienza GDB come una matrice?

set $list[10] 

ma ottengo un errore di sintassi.

È possibile creare un vettore utilizzando le variabili di convenienza?

Potrei usare i puntatori, se riesco a trovare una memoria di area assoluta GDB può usare che il programma di destinazione non utilizzerà.

Oh, a proposito, non ho una tabella dei simboli per il programma di destinazione che sto eseguendo il debug, utilizzando un compilatore non compatibile con GDB.

La versione cross-target di GDB I non supporta Python.

risposta

2

Penso che sia possibile solo se si alloca memoria nella parte inferiore. Cioè, cercare qualcosa di simile:

set $list = (int *) malloc (10 * sizeof (int)) 

cambiare i tipi per soddisfare.

Un'altra opzione simile è utilizzare la funzione {...}. Non sono sicuro di sbrigare, ma penso che in alcuni casi questo possa allocare la memoria nell'inferiore. In ogni caso, provare:

print {1,2,3,4}[2] 

ottengo

$1 = 3 
+0

cercherò il {...} funzione. Non posso usare malloc() perché non ho una tabella dei simboli, quindi gdb non sa dove sia malloc(). Potrei creare una variabile di convenienza, $ Malloc con l'indirizzo di malloc dalla mappa. Potrebbe funzionare. – KeithSmith

+0

Se hai un indirizzo utilizzabile puoi usare il cast di {TYPE} per trattarlo come qualcos'altro. Ad esempio: set $ var = {int [4]} e main. O qualcosa del genere, vedi il manuale - Ho difficoltà a ricordare la sintassi esatta di questa estensione. –

+0

@TomTromey Non penso sia possibile solo tramite allocazione manuale di una memoria nell'inferiore. Guarda: il codice 'set $ test =" Ciao "', 'p perror ($ test)' funziona correttamente. Puoi anche prendere l'indirizzo di. –

Problemi correlati