Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

VimでIDEのようなデバッグが可能になるvimspectorの紹介

$
0
0

vimspectorとは

Vimでも、ブレークポイント張って、デバッガーのように使えるよ!っていう便利なプラグイン。
Debug Adapter Protocol (DAP)によって実現してる感じっぽいです
導入方法、使い方を軽く紹介していきます!

公式のスクショ!
vimspectorの公式スクショ

導入方法

vimspectorのGitHubページにもろもろ書いてますが、いつも使っている、ダークパワーのdein.vimで導入してみます。

dein_lazy.toml

buildに、デバッガーしたい言語用オプションを書き込みます。
参考→Language dependencies
今回は、PythonとNodeでデバッグしてみようかと思います。
※遅延読み込み不要な方は、lazyじゃなくておkです。

dein_lazy.toml
repo='puremourning/vimspector'on_ft=['python','javascript']build='./install_gadget.py--enable-python--force-enable-node'

使い方

インストールは、完了したのですが、利用するまでに少し設定が必要です。
様々な設定値は、.vimspector.jsonで表現します。

adapters

実行時に利用するadapterを設定します。
インストール時に選択した言語のadapterは自動的に設定されています。
※vimspectorフォルダーのgadgets/linux/.gadgets.jsonに記入されてます。

自分で設定することも可能です。

${gadgetDir}は、<vimspector home>/gadgets/<OS>となってます。
つまり、adapter設定するときは、基本この変数使います。
他の変数はこちら

configurations

デバッガー起動する際の、設定値を記入します。

起動時、どういうコマンドを実行するか設定しておかないといけません。。。
ここは、利用パターンによって変わってくると思うので、各自調整しちゃってください。

python_file
- programに、実行対象ファイルパスを指定。

python_test
- gitRootPathを作業ディレクトリに設定し
- 引数に、-m pytestを指定して、テスト動作するように。

.vimspector.json
{"adapters":{"vscode-node":{"command":["node","${gadgetDir}/vscode-node-debug2/out/src/nodeDebug.js"],"name":"node2","type":"node2"},"vscode-python":{"command":["node","${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js"],"name":"vscode-python"}},"configurations":{"python_file":{"adapter":"vscode-python","configuration":{"name":"Python: Current File","type":"python","request":"launch","cwd":"${fileDirname}","program":"${file}","args":[],"stopOnEntry":true,"externalConsole":false,"debugOptions":[]},"breakpoints":{"exception":{"raised":"N","uncaught":"Y"}}},"python_test":{"adapter":"vscode-python","variables":{"gitRootPath":{"shell":["git","rev-parse","--show-toplevel"]}},"configuration":{"name":"Python: Test","type":"python","request":"launch","cwd":"${gitRootPath}","args":["-m","pytest"],"stopOnEntry":true,"externalConsole":true,"debugOptions":[]},"breakpoints":{"exception":{"raised":"N","uncaught":"Y"}}},"javascript_file":{"adapter":"vscode-node","configuration":{"name":"JavaScript: Current File","request":"launch","cwd":"${fileDirname}","program":"${file}","args":[],"protocol":"auto","stopOnEntry":true,"externalConsole":false},"breakpoints":{"exception":{"all":"N","uncaught":"Y"}}}}}

実行してみる!

準備は整ったので、実行する!

サンプルソースで実行してみます。

sample.py
deftest():foriinrange(10):test_var=ireturntest_varif__name__=="__main__":test_var=123result=test()print(result)raiseException(123)# わざと例外だす
test_var=123

実行

ファイルを開いた状態で、下記コマンド実行します。

call vimspector#LaunchWithSettings({'configuration':'python_file'})

call vimspector#Launch()で、選択して実行することもできます。

例外のところで自動的に止まるかと思います!
左上パネルで、止まった時点の変数内容丸見えですね!

2020-01-30-201310_1265x1022_scrot.png

VimspectorToggleBreakpoint

ブレークポイントを設定できます。
2020-01-30-212300_1265x1022_scrot.png

VimspectorWatch

指定した変数を監視します。
:VimspectorWatch test_var
test_varを常に監視しちゃいます!

2020-01-30-201811_1265x1022_scrot.png

使いやすくする!

実行は同じコマンドで実行したいので、filetypeで動的に値変更するようにして、.vimspector.jsonの設定値に規則性をもたせるようにしました。(python_file, javascript_file, sh_fileのように。)

function! LaunchFileDebug()call vimspector#LaunchWithSettings({'configuration':&filetype.'_file'})endfunction

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>