vimプラグインをデバッグ/トレースするための望ましい一般的な方法は何ですか? かなり洗練されたプラグイン Foo を持っているとします。キーを押すF9と、ファイル ブラウザで新しいウィンドウが開き、ファイルを選択できるようになります。その後、ファイル名がメイン ウィンドウにコピーされます。F9キーを押したときに何が呼び出されるか、ある種の呼び出しトレースを確認したいと思います。
3 に答える
私が見つけた最良の方法は、-V
(g)vim を起動するときにフラグを使用することです。書き込まれるログのトレースのレベル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 キーを押して、スクリプトの実行を続行します。
この時点で、画面に大量の出力が表示されるはずです。Space を押して画面をスクロールし、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 プラグインを修正/調整/進化させました。