Domanda

Attualmente sto eseguendo gdb versione 6.7.1 su Ubuntu Linux e sto lavorando in un progetto C ++.

Sorprendentemente stavo cercando di eseguire il debug di un costruttore e ho scoperto che le variabili locali dichiarate nell'ambito del costruttore non sono seguite o notate da gdb. È un bug?

Grazie per qualsiasi informazione ..

È stato utile?

Soluzione

È un bug in GCC, non in GDB.

È stato recentemente risolto .

Altri suggerimenti

Se si utilizza l'ottimizzazione (-O), disabilitarlo (rimuovere -O o utilizzare -O0). Il compilatore a volte è troppo intelligente e indovina una variabile non necessaria, esegue calcoli in fase di compilazione, cambia l'ambito di una variabile o diversi altri trucchi.

Nota che anche con "nessuna ottimizzazione", alcune ottimizzazioni banali sono ancora fatte, ma non dovrebbero interferire molto con il debug. Inoltre, con un uso inline di C ++ (incluso STL), il tuo programma può diventare molto più lento senza ottimizzazione.

Sembra che tu stia eseguendo il debug di una build ottimizzata.

Il debugger "conosce" il valore delle variabili locali perché il file di simboli descrive la loro posizione nel frame dello stack delle funzioni.

Il debugger può quindi leggere le variabili dalla memoria del processo di destinazione. Tuttavia, ciò richiede che il frame dello stack contenga copie aggiornate delle variabili locali. Quando si compila senza ottimizzazioni, il codice generato riscrive sempre le variabili locali nelle posizioni dei frame dello stack ogni volta che vengono modificate. Ciò semplifica il debug, ma costa in fase di esecuzione.

Per una build ottimizzata il compilatore dedurrà spesso che questi passaggi non sono necessari e manterrà un valore in un registro CPU per tutto il tempo necessario. È possibile che la variabile locale non ottenga mai un valore scritto nello stack. Il debugger in questo caso non ha modo di tracciare il valore della variabile, ma non lo sa e spesso riporterà i dati dallo stack come se fosse il valore della variabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top