¿Cómo puedo integrar gdb con Vim?

52

En lugar de gdbtuio ctrl+xdebajo del gdbcual se muestra el código fuente en la parte superior de la pantalla, me gustaría ver esto en mi editor de Vim que saltaría entre pestañas y se guardaría en búfer en consecuencia.

¿Cómo puedo hacer esto?

nombre
fuente
Solo como referencia encontré lldb plugin @ github.com/gilligan/vim-lldb y las capturas de pantalla parecen prometedoras.
nombra el
Por cierto, ¿alguien sabe algo sobre windbg? La integración de Vim podría haber sido una buena idea. Aunque, en realidad, creo que se trata de casi cualquier software que haya.
eyal karni

Respuestas:

33

Entre todos los complementos que he probado, encontré que ConqueGDB es el mejor enfoque. ConqueGDB usa Conque Shell para incrustar un shell interactivo dentro de vim, que GDB usa.

El flujo de trabajo con ConqueGDB consiste en no ingresar comandos GDB en el terminal GDB, usted usa accesos directos en el código fuente vim. Pero puede continuar utilizando el indicador GDB si lo desea, para comandos más avanzados, o desplazarse para ver toda la sesión de depuración.

Algunas asignaciones predeterminadas de ConqueGDB, por ejemplo:

  • leaderr : correr
  • leaderc : Hacer continuación
  • leaders : paso
  • leaderp : variable de impresión debajo del cursor

Observe cómo se ha utilizado la línea del cursor vim para emitir una 'fila de impresión' GDB, la ejecución actual del código está en otra línea (14) y hay un punto de interrupción en la línea 10.

vim con CongueGDB

Para instalar con Vundle, por ejemplo:

Plugin 'vim-scripts/Conque-GDB'

Yo uso estas opciones de complementos:

let g:ConqueTerm_Color = 2         " 1: strip color after 200 lines, 2: always with color
let g:ConqueTerm_CloseOnEnd = 1    " close conque when program ends running
let g:ConqueTerm_StartMessages = 0 " display warning messages if conqueTerm is configured incorrectly  
viccuad
fuente
que leadersignifica
En78
@ In78 Significa la tecla <kbd> \ </kbd> en la mayoría de las computadoras. Por ejemplo, <leader>rsignifica <kbd> \ </kbd> + <kbd> r </kbd> en mis computadoras. El manual de Vim tiene una entrada para ello::help leader
Parsa
No hay que olvidar esta asignación predeterminada ConqueGDB: <Leader>b. Establece un punto de interrupción en la posición del cursor. Sin embargo, NO es una palanca, por lo que no puede usarlo para eliminarlo nuevamente. Más bien, tendrá que escribir 'clear' en el indicador de GDB.
serup
Intenté usar este ConqueGdb y para que funcione, primero tengo que especificar el archivo ejecutable, y a veces falla al establecer los puntos de frenado, tengo que enfocar la ventana gdb y presionar I para insertar, antes de que aparezca el punto de interrupción. normal para ConqueGdb?
Serup
11

Tienes varios complementos que integran gdb.

  • Solíamos tener Pyclewn . El proyecto se suspendió después de la versión 2.3. El último compromiso se realizó en 2016. Para los curiosos todavía hay un espejo en Github donde su autor ha archivado su trabajo. Nota: pyclewn solía ser el último paso de la etapa en la evolución de los otros proyectos de Xavier Degaye * clewn.
  • vim-debugger , que integra varios otros depuradores
  • vim-debug de notEvil , que actúa como "capa conveniente para que pyclewn supere algunos inconvenientes"

Y también hay un complemento que integra lldb (del proyecto LLVM)

Parece que Bram está actualmente (septiembre de 2017) trabajando en la integración de gdb desde vim gracias a la nueva :terminalcaracterística. Para usarlo, necesitamos cargar el termdebugpaquete (con :packadd termdebug), luego podremos iniciar una consola gdb en una ventana vim con :TermDebug (+options). En mi opinión, podemos considerar que es el futuro de la integración de GDB bajo Vim.

Luc Hermitte
fuente
44
Bien, ¿puedes dar una breve descripción de cada uno de estos complementos?
muru
1
?? Los enlaces son a las páginas oficiales de complementos. Sí, pueden cambiar si los complementos desaparecen o si se mueven a otro lugar. En ese caso, actualizaré el mensaje en el primer caso como lo hice antes en SO. Y en el segundo caso, significaría que parte de cualquier mensaje que detalle lo que hace el complemento quedaría obsoleto. En el peor de los casos: detallar lo que realmente hace el complemento se volverá obsoleto mientras su respectivo autor trabaja en ellos, agrega funciones, etc. De todas formas. Agregaré una breve descripción de ellos la próxima semana ...
Luc Hermitte
2
@LucHermitte La publicación apareció en la cola de revisión; No agregué el texto exacto de este mensaje, el sistema lo hizo por mí. En cualquier caso, las respuestas de solo enlace se consideran "malas" en SO y la mayoría, si no todos, los sitios de SE. No solo porque pueden estar desactualizados, sino también porque realmente no explican las cosas; casi cualquier pregunta podría ser "respondida" mediante el enlace a la (s) página (s) de documentación correctas, demonios, incluso podría vincular al código fuente, pero ¿eso realmente explica algo? ¿Es eso realmente útil? ¿Eso realmente contribuye a que alguien comprenda a Vim?
Martin Tournoij
1
"No agregué el texto exacto de este mensaje, el sistema lo hizo por mí" . OKAY. Eso explica el mensaje, que me pareció bastante extraño. En cuanto a enlaces. Entiendo la política SO / SE sobre RTFM / SFTW. A diferencia de otros foros, las preguntas recurrentes / duplicadas se cierran cuando se detectan, y SO / SE tiende más hacia un enfoque wiki.
Luc Hermitte
3
Sobre dónde encontrar complementos. Podría duplicar su documentación. Pero no ayudará mucho. Además, es casi imposible mantener la respuesta actualizada a medida que evolucionan los complementos. Es posible agregar un breve resumen no actualizado de las características, y lo veré. En cualquier caso, su página oficial es el punto de entrada. En cuanto a los complementos, esta es la primera información importante. De hecho, una buena presentación podría atraernos ... Hasta que descubramos que el complemento no puede funcionar en nuestro caso particular, lo que sucede a menudo con FSOSS. Aquí es donde una lista de soluciones disponibles también es interesante.
Luc Hermitte
7

editComando GDB

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

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

El valor predeterminado editores ex, pero vimtambién comprende el +<current-line>formato.

Cuando abandonas el editor, vuelves a entrar gdb.

Esto le permite navegar libremente por la fuente y es especialmente potente si tiene ctagsintegración.

Esta es una integración integrada de gdb a vim de un hombre pobre: ​​lo principal que falta es establecer puntos de interrupción desde Vim.

edit y centro

editno centra Vim de forma predeterminada alrededor de la fuente, por lo que he creado un script de Python que lo hace: https://stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the- current-line-in-a-text-editor-from-gdb / 43557406 # 43557406

Comando de punto de interrupción para ayuda 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('.')

Entonces puedes pegar eso gdb.

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

Ver también: https://stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
3

Aunque técnicamente no es vim. cgdb es una versión maldita de gdb con combinaciones de teclas similares a vim. Ha sido mi goto depurador durante años:

https://cgdb.github.io/

ericcurtin
fuente