¿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
para mostrar objetos STL en Eclipse CDT, hago esto y funciona bien:
http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF
(opción número 2 en el enlace que enviaste)
Espero que esto ayude