Отладка плагинов Vim со следами вызовов - PullRequest
17 голосов
/ 11 марта 2012

Каков предпочтительный общий метод отладки / трассировки плагинов vim?Предположим, у меня есть довольно сложный плагин Foo, который по нажатой клавише F9 открывает новое окно с файловым браузером и дает возможность выбрать файл, после чего имя файла копируется в главное окно.Хотелось бы посмотреть, что вызывается при нажатии клавиши F9 , какая-то трассировка звонка.

Ответы [ 3 ]

14 голосов
/ 12 марта 2012

Лучший способ, который я нашел, это использовать флаг -V при запуске (g) vim. Вы можете указать уровень трассировки N и имя файла для записанного журнала:

$ vim -V[N]{filename}

Тогда сообщения трассировки будут передаваться для каждого полученного файла. (Подробнее см. :help -V.)

Перелистывание полученного файла журнала может быть болезненным, но обычно оно довольно информативно. Я считаю, что лучше всего просматривать файл журнала до и после события триггера (нажав <F9> в вашем случае), чтобы получить представление о том, когда происходит.

5 голосов
/ 11 апреля 2015

Если у вас уже открыт vim, попробуйте выполнить команду вручную во встроенном отладчике VIM.

1) Узнайте, что делает vim при нажатии клавиши

:map <F-9>

2)Запустите сопоставленную команду вручную в отладчике

:debug _mapped_command_

3) Прямо сейчас вы должны быть подключены к отладчику, поэтому

set verbose=20

4) И, наконец, нажмите n и введите клавишучтобы продолжить выполнение сценария

На этом этапе вы должны увидеть целую кучу выходных данных на экране.Вы можете нажать Пробел для прокрутки экрана, j / k для перемещения по строке.

Любой вывод, который начинается с «Строка #:», - это строка, которую vim выполняет в это время.

1 голос
/ 06 июля 2015

Для сложных плагинов обычно отладки или трассировки командной строки недостаточно.

Вы можете использовать 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)

У меня есть исправление/ tweak / развивает множество плагинов vim благодаря этому замечательному плагину.

...