2012-03-11 12 views
15

¿Cuál es el método preferible y general para depurar/rastrear los complementos de vim? Supongamos que tengo un complemento bastante sofisticado Foo, que en una tecla presionada F9 abre una nueva ventana con el explorador de archivos y le da la posibilidad de elegir un archivo, después de eso el nombre de archivo se copia en la ventana principal. Me gustaría ver cómo se llama cuando presiono la tecla F9, algún tipo de rastreo de llamadas.Depuración de plugins de Vim con rastreo de llamadas

Respuesta

13

La mejor manera que he encontrado es utilizar la bandera -V al iniciar (g) vim. Se puede especificar un nivel de rastreo N y un nombre de archivo para el registro escrito: se les dará

$ vim -V[N]{filename} 

A continuación, los mensajes de seguimiento para cada archivo que proviene. (Consulte :help -V para obtener más información.)

Arrastrarse por el archivo de registro resultante puede ser doloroso, pero por lo general es bastante informativo. Encuentro que es mejor ver el archivo de registro antes y después del evento desencadenante (presionando <F9> en su caso) para obtener una imagen de cuándo está sucediendo.

5

Si ya tiene vim abierto, intente ejecutar el comando manualmente en el depurador integrado de VIM.

1) Descubra lo que hace vim cuando se pulsa la tecla

:map <F-9> 

2) Ejecutar el comando asignado manualmente bajo depurador

:debug _mapped_command_ 

3) En este momento se debe dejar caer en la depurador, por lo

set verbose=20 

4) y, por último, pulse n y la tecla Intro para continuar r Desactivando la secuencia de comandos

En este punto, debería ver un montón de resultados en la pantalla. Puede presionar la barra espaciadora para desplazarse por la pantalla, j/k para moverse por la línea.

Cualquier salida que comience con "Línea #:" es la línea que vim está ejecutando en ese momento.

1

Para los complementos sofisticados, normalmente la depuración o el seguimiento de línea de comandos no es suficiente.

Puede usar BreakPts para realizar una depuración visual dentro de vim.

Se basa en la depuración remota, por lo que debe depurar una instancia del servidor de vim.

Básicamente:

Terminal 1:

$ vim --servername Foo 
... 
set breakpoint on any Foo function 
do whatever operation which trigger Foo logic 
... 

Terminal 2:

$ vim 
:BreakPts 
:BPRemoteServ FOO 
:BPDWhere locate (actual debug execution point) 
:BPDNext or F12 (next execution line) 
:BPDStep or F11 (step inside functions, dictionary functions) 
:BPDEvaluate or F8 (if pressed on visual selection evaluates that) 
:BPDCont or F5 (continue execution) 

ver algunos plugins se cargan dinámicamente por lo que necesita para operar con ellos antes de establecer puntos de interrupción.

Una vez cargado, puede establecer puntos de interrupción de vim conectados con:

:BPFunctions (Show debuggeable fuctions on RemoteServer) 
:BPScripts (Show debuggeable scripts on RemoteServer) 
:BPPoints (Show defined breakpoints on RemoteServer) 

tengo fix/pellizco/evolucionar una gran cantidad de plugins vim gracias a este gran plugin.

Cuestiones relacionadas