2012-05-16 13 views
5

lo uso GDB de la manzana, la versión de la siguiente maneramensaje GDB raro cuando la depuración de programa en C++

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". 

No consumo Xcode IDE ya que para mis necesidades de proyectos makefile gestionados son más convenientes, sobre todo porque a menudo necesito para compilar y ejecutar programas en máquinas remotas. Recientemente comencé a usar las siguientes características de C++ 11 (en g ++ - 4.6 y 4.7 de macports): mover constructores, nullptr, auto y decltype. Me rencently necesitaba d3bug mi código, y el siguiente mensaje extraño apareció en lugar de entrar en una función:

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

desde ya que este mensaje aparece, todos los siguientes comandos de GDB son contestadas por el mismo mensaje raro, por lo que no es posible depurar más. Parece algo relacionado con C++ 11. Mi pregunta es, ¿alguna vez te has encontrado con este mensaje, y cómo deshacerse de él ? no parece

Gracias de antemano

Giuliano

+3

Supongo que su versión de gdb se queda atrás: parece que hay información [DWARF] (http://wiki.dwarfstd.org/index.php?title=Dwarf_FAQ#What_is_DWARF.3F) que no contiene lo sé Solución: compilar/instalar un gdb más nuevo. – Flexo

Respuesta

3

La versión del BGF que está utilizando (versión de Apple) para apoyar las nuevas características del compilador ha instalado desde macports.

El mensaje de error informa que GDB no comprende parte de la información de depuración que se encuentra en el programa. La información de depuración que ha mostrado está claramente relacionada con C++ 11.

La solución es actualizar a un GDB más reciente (probablemente desde macports si hay uno allí), no usar las funciones que GDB no comprende, o aceptar que la versión de GDB que tiene no podrá Entienda esto.

+0

Intenté instalar el gdb de macport varias veces, pero nunca funcionó para mí. Como tengo prisa, preferiría no cambiar el programa. Creo que la opción n. ° 3 es la indicada por el momento. Aceptado. – Giuliano

6

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

GCC ahora genera información de desenredo también para epílogos. DWARF debuginfo generado por GCC ahora usa más características de DWARF3 que antes, y también algunas características de DWARF4. GDB anterior a la 7.0 no puede manejar ninguno de estos, por lo tanto, para depurar los binarios generados por GCC 4.5 o las bibliotecas GDB 7.0 o posterior es necesario. Puede desactivar el uso de las funciones DWARF4 con las opciones -gdwarf-3 -gstrict-dwarf, o usar -gdwarf-2 -gstrict-dwarf para restringir GCC a solo DWARF2, pero la información de desenrollar epílogo se emite incondicionalmente siempre que se emite información de desenrollado.

Pero ya lo sabías, porque todos leen las notas de la versión cuando actualizan su compilador, ¿no? ;-)

+3

¡Es bueno saberlo! ¡Por supuesto que leí cuidadosamente todas las notas de la versión antes de realizar mi 'sudo port install whatever'! ¿Con quién crees que estás hablando? – Giuliano

+0

jajaja ... ¡Por supuesto que todos lo sabían! – jww

Cuestiones relacionadas