2012-03-11 10 views
15

vimプラグインのデバッグ/トレースの一般的な方法は何ですか? F9というキーを押すとファイルブラウザーで新しいウィンドウが開き、ファイルを選択した後にファイル名がメインウィンドウにコピーされるという非常に洗練されたプラグインFooがあるとします。 F9キー、何らかのコールトレースを押したときに何が呼び出されているのかを見たいと思います。コールトレース付きのVimプラグインのデバッグ

答えて

13

私は発見した最良の方法は、(G)Vimを起動するとき-Vフラグを使用することです。

$ vim -V[N]{filename} 

そして、トレースメッセージが発信されているファイルごとに与えられます:あなたが書かれたログのNをトレースのレベルとファイル名を指定することができます。痛みを伴うことができたログファイルを通じてトロール

(。詳細は:help -Vを参照)が、それは通常、かなり有益です。私は、いつ起こっているのかを把握するために、トリガーイベントの前後にログファイルを表示することをお勧めします(あなたのケースでは<F9>を押してください)。あなたは既にVimが開いている場合

5

、VIMのデバッガに建てられたの下で手動でコマンドを実行してみてください。

1)手動でデバッガ

:debug _mapped_command_ 

3)今あなたがしてドロップする必要があります下にマッピングされたコマンドを実行します。)あなたは、キー

:map <F-9> 

2を押すとVimが何をするかを調べますデバッガ、だから

set verbose=20 

4)そして最後にnとEnterキーを押してrを続けるunningこの時点でスクリプト

あなたは、画面上の出力の全体の束が表示されるはずです。 Spaceを押して画面をスクロールし、j/kを行単位で移動できます。

「ライン#:」で始まる任意の出力は、ラインVimはその時点で実行されています。

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のプラグインの修正/微調整/進化多くにこの偉大なプラグインのおかげを持っています。

関連する問題