2010-09-21 15 views
17

Durante il debug di un programma C in gdb, ho un punto di interruzione in un ciclo for. Non riesco a stampare il valore di "i" (ottengo: nessun simbolo "i" nel contesto corrente). Posso stampare il valore di tutte le altre variabili. È normale?gdb: Nessun simbolo "i" nel contesto corrente

Ecco il loop:

for (i=0; i < datasize; i++){ 
    if (feature_mask[i] > 0){ 
     k = feature_mask[i] - 1; 
     if (neighbors[k][nmax-1] != 0){ 
      neighbors[k][nmax-1] = bvalue; 
      feature_mask[i] = -feature_mask[i]; 
     } 
    } 
} 

Grazie

risposta

19

Probabilmente è stato ottimizzato dal codice compilato poiché si utilizza solo lo feature_mask[i] all'interno del ciclo.

Hai specificato un livello di ottimizzazione quando hai chiamato il tuo compilatore? Se stai usando gcc, allora ometti tutte le opzioni -O e riprova.

4

Assicurarsi che il programma viene compilato senza ottimizzazione, e con le informazioni di debug abilitato. È abbastanza probabile che il contatore dei loop finisca in un registro.

2

Controlla le opzioni di ottimizzazione. È possibile che il GCC possa sostituire la variabile con un puntatore in feature_mask.

3

Puoi provare a dichiarare come volatile. Ciò impedirà alcune ottimizzazioni del compilatore (e si spera che facciano apparire i all'interno del debugger).

+12

Questo è sciocco. Non lavorare intorno alle ottimizzazioni - sempre compilare senza ottimizzazioni per il debug (tranne che nel caso raro che un bug si manifesta solo con ottimizzazioni - ma questa è un'altra storia). –

+1

Sono d'accordo con Daniel. +1 per il suo commento – pmg

16

Ho riscontrato questo problema di recente. Ho compilato GCC 5.1 e poi l'ho usato per compilare un codice di C++ 11. E, anche se ho potuto eseguire il codice del programma in gdb, non ho potuto stampare il valore di qualsiasi variabile, ho continuato a ottenere “ Nessun simbolo "xyz" nel contesto attuale ” errori, per ogni variabile.

Stavo usando gdb 7.4, ma l'ultima versione disponibile all'epoca era 7.9. Ho scaricato l'ultima versione di gdb e compilato (usando GCC 5.1) e quando si utilizza gdb 7.9 sono stato in grado di ispezionare con successo i valori delle variabili di nuovo.

Suppongo che le informazioni di debug di GCC 5.1 non siano compatibili con gdb 7.4.

+1

Infatti, vedi [questa risposta] (http://stackoverflow.com/a/15051109/673852). – Ruslan

Problemi correlati