¿Depura el código de C++ en Vim? ¿Cómo?
debugging gdb (5)
La pregunta es para todos ustedes, que usan Vim para desarrollar aplicaciones C ++.
Hubo un período en mi vida, que puede describirse como ''¡Odio a Vim!'' ... ''¡Vim es agradable!''
Sin embargo, habiendo crecido principalmente en IDEs de desarrollo de Microsoft, me he acostumbrado a esos accesos directos F5 - F11 al depurar código, ventana de observación, pila de llamadas y el código principal, todo visible sin necesidad de escribir ningún comando GDB.
Así que aquí está la cuestión:
¿Usas Vim también 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, paso hacia afuera?
Por favor, no me digas que usas GDB como línea de comando, solo ves una línea que está depurada, etc.
Después de haber trabajado recientemente en una aplicación durante mucho tiempo que requería un montón de cosas en la caja que 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 un script 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.
Para resumir, 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.
En contraste con las otras respuestas, hay al menos tres opciones que hacen justo lo que necesita: clewn , pyclewn y clewn .
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 de las distribuciones recientes de Linux, por lo que no debería ser un problema).
Para citar del sitio web de Clewn:
Clewn implementa el soporte completo de gdb en el editor vim: puntos de interrupción, variables de observación, finalización del comando gdb, ventanas de ensamblaje, etc.
Creo que definitivamente deberías 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.
Usar un depurador de nivel de fuente es solo una de las muchas maneras de diagnosticar el comportamiento defectuoso del programa, y raramente me encuentro lanzando uno, a pesar de que es muy fácil de hacer.
Entonces, para mí, simplemente no hay una 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 propósitos, pero estas elecciones evolucionan de forma independiente con el tiempo.
Comando de edit
GDB
Abre un editor en la línea actual usando el comando:
$EDITOR +<current-line> <current-file>
El editor
predeterminado es ex
, pero vim
también entiende el formato +<current-line>
.
Cuando sale del editor, regresa a gdb
.
Esto le permite navegar libremente por la fuente y es especialmente potente si tiene integración de ctags
.
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
edit
no centra Vim por defecto alrededor de la fuente, así que he creado una secuencia de comandos de Python que lo hace: ¿Cómo abrir el archivo actual en la línea actual en un editor de texto desde GDB?
Comando de punto de interrupción al ayudante del portapapeles
Este comando vim copia un especificador de punto de interrupción de tipo:
b <file-path>:<line-number>
al portapapeles:
command! Xg :let @+ = ''b '' . expand(''%:p'') . '':'' . line(''.'')
Luego puedes pegar eso en gdb
.
Esta es la integración de vim a gdb de un hombre pobre para facilitar el establecimiento de puntos de interrupción.