使用调用跟踪调试Vim插件

时间:2012-03-11 15:51:16

标签: vim vim-plugin

调试/跟踪vim插件的首选方法是什么?假设我有一个相当复杂的插件Foo,它在一个按下的键 F9 打开带有文件浏览器的新窗口,并且可以选择一个文件,然后将文件名复制到主窗口中。我希望看到当我按 F9 键时调用的内容,某种调用跟踪。

3 个答案:

答案 0 :(得分:14)

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

$ vim -V[N]{filename}

然后将为每个源文件提供跟踪消息。 (有关详细信息,请参阅:help -V。)

通过生成的日志文件进行拖拽可能很痛苦,但通常信息非常丰富。我发现最好在触发事件之前和之后查看日志文件(在你的情况下按<F9>)以获得发生何时的图片。

答案 1 :(得分:5)

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

1)找出按键时vim的作用

:map <F-9>

2)在调试器

下手动运行映射命令
:debug _mapped_command_

3)现在你应该进入调试器,所以

set verbose=20

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

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

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

答案 2 :(得分:1)

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

您可以使用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)

看到一些插件以dinamically方式加载,因此您需要在设置断点之前使用它们。

加载后,您可以通过以下方式设置连接的vim的断点:

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

由于这个出色的插件,我已经修复/调整/改进了很多vim插件。