Pregunta

Al usar CDT, me gustaría que std :: string se muestre en la ventana de depuración 'variable' con la cadena que contiene. Por ejemplo, si actualmente contiene la palabra " history " me gustaría ver history en la ventana del depurador etiquetada " variables " ;.

Creo que hay una forma general de hacer que se profundice en los objetos, pero no puedo señalarlo. ¿Alguien por ahí sabe cómo hacer esto?

Esto también sería útil para mí cuando se genera un solo campo desde un objeto complejo.

Gracias Bill

¿Fue útil?

Solución

Tenga en cuenta que no desea una forma general de profundizar en los objetos; desea imprimir bonitos contenedores STL.

Creo que CDT delega esto al backend del depurador; es decir, depende de su depurador (gdb, ¿quizás?) informar a CDT sobre el valor de una variable y cómo se puede expandir.

Editar: no creo que el backend GDB enviado con CDT tenga soporte para "inteligente" visualización de contenedores STL. Si está realmente interesado en esto, le sugiero que se comunique con el equipo de desarrollo de CDT en cdt-dev@eclipse.org.

Actualizar / Editar: consulte otras respuestas a continuación para obtener instrucciones sobre cómo habilitar impresoras bonitas en CDT.

Otros consejos

Mostrar contenedores stl con eclipse / gdb también fue un gran dolor para mí durante mucho tiempo.

Pero ahora acabo de descubrir que la última versión de gdb con Python habilitado puede ayudar con eso.

Sigue lo que he hecho (usando Ubuntu Linux 8.10):

  • Instalar gdb versión > = 6.8.50 (por ejemplo, de debian experimental )
  • Cree un archivo llamado .gdbinit en la raíz de su proyecto con el siguiente contenido:

    importación de python gdb.libstdcxx.v6.printers

Ahora los contenedores stl estarán muy impresos .

Si desea verificar si ya tiene un gdb habilitado para Python (o si su nueva instalación ha funcionado):

  • Inicie gdb desde la consola
  • En el indicador de gdb, ejecute lo siguiente

    (gdb) python print '¡Python habilitado GDB está funcionando!

  • Si el comando anterior produce lo que esperamos, entonces está funcionando.

Para obtener más información, consulte este blog .

Windows 7

Consigue las bonitas impresoras: svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

Configurar eclipse con: C / C ++ Debug Gdb:

C:\MinGW\bin\gdb-python27.exe
C:\MinGW\bin\.gdbinit

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

Esto es para usuarios de MinGW con Eclipse CDT

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

   MinGw-get.exe install gdb-python

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

1b) Asegúrese de que PYTHONPATH y PYTHONHOME estén configurados en su entorno:

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

1c) Agregue PYTHONHOME a su RUTA

 %PYTHONHOME%;...

2a) Abra un texto, ingrese las siguientes declaraciones. Observe que la tercera línea es     señalando dónde se encuentran 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     con un periodo de explorador. La mayoría de las ediciones de texto (incluido el Bloc de notas) le permitirán. GDB init     los archivos son como 'scripts' de comandos GDB que GBD ejecutará al cargar.

2c) El archivo '.gdbinit' debe estar en el directorio de trabajo de GDB (lo más probable es que esto sea     el directorio raíz de tus proyectos pero tu IDE puede decírtelo.

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

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 sus 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 apunte al nuevo gdb-python.exe Y apunte al.

Si tiene problemas:

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

- Además, el .gdbinit es un PITA, asegúrese de que esté nombrado correctamente y en la carpeta de trabajo de GDB    que no es necesariamente donde se encuentra gdb-python.exe! Mire su salida de GDB al cargar GDB para ver si aparece a) 'python-enabled' durante la carga y si aparecen las declaraciones en .gdbinit.

- Finalmente, tuve muchos problemas con las variables del sistema. Si python le da 'ImportError', lo más probable es que no haya configurado 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 del eclipse sea un poco más agradable porque no necesita poner en caminos absolutos. Pero aún así, a veces .gbdinit necesita un camino absoluto. si funciona, verá resultados de gbd (trazas de consola > gdb) como este al iniciar el 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) 

La única forma que he encontrado es usar la línea de comando GDB:

  1. En la ventana Depurar , haga clic en gdb . Está justo debajo del rastro de la pila.
  2. En la ventana Consola , use el comando GDB up para llegar al marco de pila que desee
  3. Nuevamente en la ventana Consola , use el comando print para mostrar el std :: string variable:

    p mystring

Pero eso es un gran problema.

Algo que he notado es que cuando paso el mouse sobre la variable, los campos de la cadena std :: en realidad se muestran, pero está truncada, por lo que no veo la parte más interesante: el valor de la cadena. Quizás haya una manera de aumentar la longitud máxima del valor que se muestra.

billcoke su mejor opción es usar algunas macros gdb que puede escribir en la consola gdb que se puede abrir en la ventana Consola / Depurador en eclipse. Usted puede encontrarlos aquí: http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.01. txt

no será automático al pasar el ratón por encima, pero debe escribir lo que es agotador ... pero incluso en el año 2009, el eclipse CDT no ha tenido éxito en ofrecernos algunas características de depuración agradables, así que esta es su mejor opción.

PARA RPSENG: gracias por el consejo rpseng! funciona muy bien! desafortunadamente parece que mi eclipse (Ganímedes) se confunde tanto que ya no descubrirá más el tipo de punteros a las instancias de mis propias clases y su herencia, por lo que ya no es posible pasar por las variables miembro de esos punteros. ¿Está trabajando con CDT 6.0 y funciona mejor allí?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top