2010-08-21 9 views
117

La pregunta es para todos ustedes, que usan Vim para desarrollar aplicaciones C++.¿Depura el código de C++ en Vim? ¿Cómo?

Hubo un período en mi vida, que se puede describir como 'I hate Vim !!!' .. '¡Vim es agradable!'

Sin embargo, después de haber crecido sobre todo en entornos de desarrollo de desarrollo de Microsoft, me he acostumbrado a los F5 - F11 atajos cuando la depuración del código, ventana, pila de llamadas y el código principal Watch - todo visible sin necesidad de escribir cualquier comando GDB.

Por lo tanto, aquí está la pregunta: ¿

¿Utiliza Vim, así como para la depuración? ¿O cambias a algún IDE para este propósito? ¿Cúal?

Para aquellos que usan Vim para depurar código: ¿hay complementos para establecer puntos de interrupción en el editor, resaltar la línea que estamos depurando actualmente, auto-navegación durante el paso, paso hacia adentro, salir?

Por favor, no me diga que utilice el BGF como la línea de comandos, consulte una sola línea que está depurando, etc.

+0

Estoy seguro de que todavía puede encontrar personas que están desarrollando y depurando con "ed". –

+40

Oh, Dios mío, responden a las preguntas "depurar mi código de C++ por favor", pero cierran * esto * como demasiado localizado ... ¡ridículo! –

+10

Prueba 'gdb -tui'. – Jayesh

Respuesta

65

En contraste con las otras respuestas, hay al menos tres opciones que hacen justo lo que necesita: clewn, pyclewn y vimgdb.

Los tres proyectos están relacionados. vimgdb es un parche contra Vim y requiere que Vim sea recompilado.clewn es un programa independiente que se comunica con Vim a través de la interfaz de socket de Netbeans. Esto requiere que Vim se construya con la opción +netbeans (este es el caso en las distribuciones de Linux recientes, por lo que no debería ser un problema).

citar de la página web del clewn:

Clewn implementa soporte GDB completo en el editor vim: puntos de interrupción, visualice variables finalización del comando gdb, ventanas de montaje, etc.

Creo que se definitivamente debería intentarlo.

La página de inicio del sitio web pyclewn muestra una comparación entre los tres proyectos.

Hace unos meses probé pyclewn. Fue un poco difícil de configurar, pero se ve bien y prometedor. Acabo de hacer algunas pruebas y puedes establecer marcadores, etc., las cosas habituales que esperarías de un depurador gráfico. Terminé no usarlo por razones contingentes, pero estoy dispuesto a darle otra oportunidad.

+4

Conque GDB es una buena alternativa. Fácil de instalar, simple y muy potente. – Druesukker

+0

@UncleZeiv vimgdb está desactualizado. Expresé la necesidad de una actualización aquí: https://github.com/larrupingpig/vimgdb-for-vim7.4/issues/4 – hlin117

+0

@Druesukker, ¡su respuesta merece una respuesta formal! – solotim

1

Tener recientemente trabajó en una aplicación durante mucho tiempo que requiere un montón de cosas a estar en el lugar en la caja que se estaba ejecutando (configuración del dispositivo), escribí el código en vim, tenía scripts que automatizaban la construcción, empujándolo a un servidor, que tenía una secuencia de comandos allí para notar el archivo centinela junto con los binarios. Esto reiniciaría los servicios apropiados en el cuadro, y en otra ventana ssh tenía un tail -f ejecutándose en mi archivo de registro.

En resumen, no usé ningún depurador. Si algo se muere de forma inesperada, simplemente subiría los niveles de registro, lo reharía y vería lo último que se registró antes de que muriera, luego lo analizaré y solucionaré el problema.

Lo bueno fue que cuando algo tenía problemas en un entorno de cliente, simplemente pedía un registro de nivel de depuración y podía identificar el problema sin siquiera requerir acceso a su servidor.

... pero sí, hubo momentos en los que hubiera sido bueno tener un depurador.

12

Vim es un buen editor, pero para hacer la depuración utilizo un depurador (como GDB).

Pero no tiene que usar GDB en modo texto; puede usar una interfaz gráfica como KDbg, DDD o Insight.

Hay formas de obtener GDB en Vim (pero luego se obtiene la depuración basada en texto).

+2

Pruebe gdbtui .. basado en terminal pero bastante efectivo. – Jack

+0

gdbtui también es bueno. – Johan

0

Uso vim + ctags + taglist para escribir y navegar código en sistemas Windows y * nix. Hasta donde sé, no hay forma de usar un depurador desde vim, entonces uso depuradores externos (VS, windbg, gdb ...).

3

El uso de un depurador de nivel de fuente es solo una de las muchas maneras de diagnosticar el comportamiento defectuoso del programa, y ​​rara vez me encuentro lanzando uno, a pesar de que es muy fácil de hacer.

Por lo tanto, para mí, , simplemente no hay ninguna ventaja inherente al uso de un editor de texto que también es un depurador. En cambio, utilizo el editor de texto que prefiero, independientemente de qué depurador decida usar. Por el momento, utilizo principalmente gedit y kdbg para estos fines, pero estas elecciones evolucionan de forma independiente con el tiempo.

+0

A menos que esté desarrollando control remoto en un host de desarrollo libre de kde/gnome. – user826955

0

BGF edit comando

Abre un editor en la línea actual con el comando:

$EDITOR +<current-line> <current-file> 

El valor por defecto es editorex, pero vim también entiende el formato +<current-line>.

Cuando sale del editor, vuelve al gdb.

Esto le permite explorar la fuente libremente y es especialmente potente si tiene ctags integración.

Esta es una integración gdb to vim unidireccional incorporada de un hombre pobre: ​​la principal falta es establecer puntos de interrupción desde Vim.

edit y centro de

edit no se centra Vim de forma predeterminada alrededor de la fuente, por lo que he creado un script en Python que lo hace: How to open the current file at the current line in a text editor from GDB?

comando de punto de interrupción a ayudante portapapeles

Este comando vim copia un especificador de punto de interrupción del tipo:

b <file-path>:<line-number> 

en el portapapeles:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.') 

A continuación, puede simplemente pegar eso en gdb.

Esta es la integración de vim a gdb de un hombre pobre para facilitar la configuración de puntos de interrupción.

Cuestiones relacionadas