2012-05-16 15 views
5

C++ io uso gdb della mela, la versione da seguiremessaggio gdb strano quando il debug programma

GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
Copyright 2004 Free Software Foundation, Inc. 
GDB is free software, covered by the GNU General Public License, and you are 
welcome to change it and/or distribute copies of it under certain conditions. 
Type "show copying" to see the conditions. 
There is absolutely no warranty for GDB. Type "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin". 

Non faccio uso di Xcode IDE in quanto per le mie esigenze progetti makefile gestiti sono più convenienti, soprattutto perché ho spesso bisogno compilare ed eseguire programmi su macchine remote. Recentemente ho iniziato a utilizzare le seguenti funzionalità di C++ 11 (su g ++ - 4.6 e 4.7 da macports): move constructors, nullptr, auto e decltype. Ho rencently bisogno di d3bug il mio codice, e il seguente messaggio strano è apparso, invece di entrare in una funzione:

Die: DW_TAG_unspecified_type (abbrev = 36, offset = 4315) 
     has children: FALSE 
     attributes: 
       DW_AT_name (DW_FORM_string) string: "decltype(nullptr)" 

da allora appare questo messaggio, tutti i seguenti comandi gdb si risponde con lo stesso messaggio di strano, quindi non è possibile eseguire il debug più. Sembra qualcosa legato a C++ 11. La mia domanda è, hai mai incontrato questo messaggio e come liberarti di ?

Grazie in anticipo

Giuliano

+3

La mia ipotesi è la tua versione di gdb in ritardo - sembra che ci sia [DWARF] (http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F) informazioni che non fa lo so. Soluzione: crea/installa un nuovo gdb. – Flexo

risposta

3

La versione di GDB si sta utilizzando (versione di Apple) non sembra per supportare le funzionalità più recenti del compilatore è stato installato da MacPorts.

Il messaggio di errore segnala che GDB non ha compreso alcune delle informazioni di debug rilevate nel programma. Le informazioni di debug che ha mostrato sono chiaramente correlate al linguaggio C++ 11.

La soluzione è di eseguire l'aggiornamento a un GDB più recente (probabilmente da Macports se ce n'è uno), non utilizzare le funzionalità che GDB non comprende o accettare che la versione di GDB non sia in grado di capisci questo.

+0

Ho provato a installare il gdb di Macport più volte, ma non ha mai funzionato per me. Dato che sono di fretta, preferirei non cambiare il programma. Penso che l'opzione n. 3 sia quella per il momento. Accettato. – Giuliano

6

http://gcc.gnu.org/gcc-4.5/changes.html dice

GCC ora genera informazioni rilassarsi anche per epiloghi. DWARF debuginfo generato da GCC ora utilizza più funzionalità di DWARF3 rispetto a prima e anche alcune funzionalità di DWARF4. GDB precedente alla 7.0 non è in grado di gestire nessuno di questi, quindi per eseguire il debug di binari generati da GCC 4.5 o di librerie è necessario GDB 7.0 o successivo. È possibile disabilitare l'uso delle funzionalità DWARF4 con le opzioni -gdwarf-3 -gstrict-dwarf o utilizzare -gdwarf-2 -gstrict-dwarf per limitare GCC a solo DWARF2, ma le informazioni di svolgimento dell'epilogo vengono emesse incondizionatamente ogni volta che vengono inviate informazioni.

Ma lo sapevi già, perché tutti leggono le note di rilascio quando aggiornano il compilatore, vero ?! ;-)

+3

Buono a sapersi! Naturalmente ho letto attentamente tutte le note di rilascio prima di eseguire il mio 'sudo port install any qualsiasi'! Con chi credi di parlare? – Giuliano

+0

Lol ... Ovviamente lo sapevano tutti! – jww

Problemi correlati