使用调用跟踪调试Vim插件



调试/跟踪vim插件的首选通用方法是什么?假设我有一个相当复杂的插件Foo,它在按下F9键时会打开带有文件浏览器的新窗口,并提供选择文件的可能性,之后文件名会复制到主窗口中。我想看看当我按下F9键时会调用什么,某种调用跟踪。

我发现的最好的方法是在启动(g)vim时使用-V标志。您可以指定跟踪N的级别和写入日志的文件名:

$ vim -V[N]{filename}

然后,将为每个源文件提供跟踪消息。(详见:help -V。)

遍历生成的日志文件可能很痛苦,但通常信息量很大。我发现最好在触发事件前后查看日志文件(在您的情况下按<F9>),以了解事件发生的时间。

如果您已经打开了vim,请尝试在vim的内置调试器下手动执行该命令。

1) 了解vim在按下键时会做什么

:map <F-9>

2) 在调试器下手动运行映射命令

:debug _mapped_command_

3) 现在你应该被放到调试器中,所以

set verbose=20

4) 最后按n和Enter键继续运行脚本

此时,您应该在屏幕上看到一大堆输出。您可以按空格滚动屏幕,按j/k逐行移动。

任何以"Line#:"开头的输出都是vim当时正在执行的行。

对于复杂的插件,通常命令行调试或跟踪是不够的。

您可以使用BreakPts在vim中进行可视化调试。

它基于远程调试,因此需要调试vim的服务器实例。

基本上:

终端1:

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

终端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)

请参阅一些插件是按常规加载的,因此在设置断点之前需要使用它们进行操作。

加载后,您可以使用从连接的vim设置断点

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

由于这个伟大的插件,我修复/调整/进化了很多vim插件。

最新更新