c++ eclipse gdb eclipse-cdt gdb-python

¿Cómo habilitar la impresión bonita de gdb para objetos C++ STL en Eclipse CDT?



eclipse-cdt gdb-python (5)

Estoy tratando de agregar una bonita impresión para objetos STL en eclipse cdt. Traté de seguir los pasos que se describen aquí:

http://sourceware.org/gdb/wiki/STLSupport

Revisé la carpeta de Python, pero parece que no puedo hacer esto ...

Creé un gdbinit y seleccioné para mi configuración de depuración, pero cada vez que trato de iniciar la depuración obtengo el siguiente error:

Error while executing Python code. !STACK 0 java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:6: Error in sourced command file: Error while executing Python code. at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.processMIOutput(AbstractMIControl.java:824) at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.run(AbstractMIControl.java:662)

Si trato de ejecutar los contenidos de gdbinit en un shell de python, aparece este error:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. import sys sys.path.insert(0, ''/home/Documents/python'') from libstdcxx.v6.printers import register_libstdcxx_printers Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named libstdcxx.v6.printers

Parece que no tengo dicho módulo ... No tengo ni idea sobre Python, así que ni siquiera sé qué es un "módulo" en Python ...

puede alguien ayudarme con esto? Para mí es muy importante poder ver la información de depuración real, o útil para decirlo de esa manera. O de alguna manera puedo depurar incluso desde la consola y obtener un buen resultado de gdb, porque si voy a imprimir una cadena, obtengo una salida inútil ...

Saludos, Alex


Esta es la solución que funciona para mí.

Descargue ( http://www.gnu.org/software/gdb/download/ ) e instale el último gdb (es decir, con --prefix $ HOME). Es compatible con scripts de python.

Obtenga impresoras lindas de Python ejecutando

svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

en un directorio de su elección (es decir, $ (HOME) / distribs / gdb_printers). Obtendrá el subdirectorio ''python'' en el directorio de pago.

Coloque esto en su archivo $ (HOME) /. Gdbinit con la ruta adecuada a las impresoras bonitas:

python import sys sys.path.insert(0, ''/home/YOUR_NAME_HERE/distribs/gdb_printers/python'') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end

Esto hace que la impresión bonita se pueda utilizar a través de la interfaz de línea de comandos de gdb ( >(gdb) p my_std_string ).

A continuación, explica el uso durante la depuración en Eclipse.

Descargue ( http://download.eclipse.org/eclipse/downloads/ ) la última versión estable de Stream o versión de Eclipse (> = 3.7 versión).

Descargue ( http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html para Eclipse Indigo o http://www.eclipse.org/cdt/downloads.php para Eclipse Juno) el último Eclipse Herramientas de desarrollo C / C ++ (Eclipse CDT).

Ejecute Eclipse y elija el directorio del espacio de trabajo donde se almacenarán sus opciones (es decir, $ HOME / proyectos). Haga clic en Ayuda-> Instalar nuevo software ... Haga clic en Agregar ...-> Archivar ... y elija la compilación de CDT que acaba de descargar. Luego debe elegir los componentes para instalar: haga clic en Características principales de CDT -> Herramientas de desarrollo C / C ++ (y posiblemente otros componentes de su elección). Luego proceda con la instalación y reinicie Eclipse.

Especifique la ubicación correcta de gdb y .gdbinit en Eclipse y asegúrese de que la opción Pretty Printing esté habilitada:

Window -> preferences -> C/C++ -> Debug -> GDB

Ahora puede ver los contenedores STL bastante impresos en la vista Variables mientras depura en Eclipse.

Se pueden usar otros comandos para hacer que la salida de gdb sea más decente:

set print pretty on set print object on set print static-members on set print vtbl on set print demangle on set demangle-style gnu-v3 set print sevenbit-strings off

ACTUALIZACIÓN: Con respecto a hacer que funcione para proyectos antiguos, vea el punto 4) en la respuesta de oxidado a continuación.

ACTUALIZACIÓN2: ubuntu 12.04 tiene libstdc ++ 6-4.6-dbg que instala el módulo /usr/share/gcc-4.6/python/libstdcxx/ python para usted


Me gustaría ampliar la respuesta de Windows 7 porque algunos pasos clave se omiten:

Esto es para usuarios de MinGW con Eclipse CDT

0) Si no tiene Python GDB, abra un shell / command y use MinGW-get.exe para ''instalar'' GDB habilitado para Python, por ej.

MinGw-get.exe install gdb-python

1a) Obtenga Python 2.7.x de http://python.org/download/ e instálelo

1b) Asegúrese de que PYTHONPATH y PYTHONHOME se encuentren en su entorno:

PYTHONPATH should be C:/Python27/Lib (or similar) PYTHONHOME should be C:/Python27

1c) Agregue PYTHONHOME a su TRAYECTORIA

%PYTHONHOME%;...

2a) Abra un texto enter, ingrese las siguientes afirmaciones. Observe que la tercera línea señala hacia dónde se ubican los scripts de Python. ¡Vea las notas a continuación sobre esto!

python import sys sys.path.insert(0, ''C:/MinGW/share/gcc-4.6.1/python'') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end

2b) Guardar como ''.gdbinit'' NOTA: el explorador de Windows no le permitirá nombrar un archivo que comience con un período del explorador. La mayoría de las ediciones de texto (incluido el Bloc de notas) te lo permitirán. Los archivos de inicio de GDB son como ''scripts'' de los comandos de GDB que se ejecutarán en GBD al cargarlos.

2c) El archivo ''.gdbinit'' debe estar en el directorio de trabajo de GDB (lo más probable es que este sea su directorio raíz de proyectos, pero su IDE puede decirle.

3) Abra su diálogo de preferencias Eclipse (u otro IDE). Vaya al submenú C ++ Debugger.

4) Configure Eclipse para usar C:/MinGW/bin/gdb-python27.exe como el depurador y su .gdbinit como el archivo de configuración.

5a) Vuelva a crear todas las configuraciones de inicio de depuración (elimine la anterior y cree una nueva desde cero).

--OR--

5b) Edite cada configuración de depuración y apúntela al nuevo gdb-python.exe Y apúntelo a.

Si te encuentras con problemas:

- ¡No olvides cambiar la ubicación al directorio python en el código python anterior! Este directorio ha sido creado por MinGW, así que no busques descargar las bonitas impresoras, MinGW lo hizo por ti en el paso cero. Simplemente vaya a su director de instalación MinGW, la carpeta compartida, la carpeta GCC (tiene número de versión) y encontrará la carpeta python. Esta ubicación es lo que debería estar en el script de python cargado por GDB.

--También, .gdbinit es un PITA, asegúrese de que su nombre sea correcto y en la carpeta de trabajo de GDB, que no es necesariamente donde se encuentra gdb-python.exe. Mire la salida de su GDB cuando cargue GDB para ver si a) aparece ''python-enabled'' durante la carga y aparecen las declaraciones en .gdbinit.

- Finalmente, tuve muchos problemas con las variables del sistema. Si python te da ''ImportError'', entonces lo más probable es que no hayas establecido PYTHONPATH o PYTHONHOME.

--El directorio con ''gdb-python27'' (por ejemplo, C: / MinGW / bin '') también debe estar en su ruta y, si lo está, hace que la configuración de eclipse sea un poco más agradable porque no necesita poner en rutas absolutas . Pero aún así, a veces el .gbdinit necesita un camino de absoulte. si funciona, verá el resultado de gbd (console-> gdb traces) como este al inicio del depurador:

835,059 4^done 835,059 (gdb) 835,059 5-enable-pretty-printing 835,069 5^done .... 835,129 12^done 835,129 (gdb) 835,129 13source C:/MinGW/bin/.gdbinit 835,139 &"source C://MinGW//bin//.gdbinit/n" 835,142 13^done 835,142 (gdb)


Sé que esto no responde a la pregunta original, pero pensé que podría ser útil para aquellos que depuran en Eclipse en Windows / MinGW . El procedimiento para Windows es similar:

1) Obtenga Python 2.7.x de http://python.org/download/

2) Crea .gdbinit algún lugar que contenga algo como esto:

python import sys sys.path.insert(0, ''C:/MinGW/share/gcc-4.6.1/python'') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end

3) Configure Eclipse CDT para usar C:/MinGW/bin/gdb-python27.exe como depurador y su .gdbinit como archivo de configuración.

4) Vuelva a crear su sesión de inicio de depuración (elimine la anterior y cree una nueva desde cero).


Si sigue la respuesta aceptada y UPDATE2 y gdb recibe un error como este:

Traceback (most recent call last): File "<string>", line 3, in <module> File "/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py", line 54 raise ValueError, "Cannot find type %s::%s" % (str(orig), name) ^ SyntaxError: invalid syntax /home/[you]/.gdbinit:6: Error in sourced command file: Error while executing Python code.

Es porque su versión de gdb usa Python 3 (confirme con esta respuesta )

here se explica una solución para este problema

Alternativamente, siga las instrucciones para obtener la fuente de svn: //gcc.gnu.org, que es compatible con Python 3