debugging denops.vim
はじめに
- 記事にするにはまだ確立された手法ではないこと、質問や追記がしやすいことからスクラップを選択。
- ある程度まとまったら記事にします(いつになるやら)。
- vimド素人、TSは4年程しか使ってないのでかなりガバい自覚があります。むしろ皆さんに聞いて手法を良くしたいです、ご協力宜しくお願いします。
導入した(いと思った)きっかけ
vscodeやwebstormのようなbreakpointでとめて変数を眺めるデバッグをdenopsでもしたかった。
備考
- 質問はここかvim-jp slack で受け付けます。
ISSUES
- vimやdenopsで完結する環境作り
- 多分 v8 inspector対応の
runnereditorがいる
- 多分 v8 inspector対応の
必要なもの
- denopsが動く環境
- V8 inspector 対応のデバッグコンソール
- chrome とか
- vscodeやwebstormもあーだこーだすれば使えるかも
手順(chrome devtool使用時)
-
denopsの動作環境を用意
-
let g:denops#server#service#deno_args = get(g:,
\ 'denops#server#service#deno_args', [
\ '-q',
\ '--no-check',
\ '--unstable',
\ '-A',
\ ]) + ['--inspect']
を指定- https://zenn.dev/lambdalisue/articles/b4a31fba0b1ce95104c9#0.-プラグイン開発前準備 と同様に .vimrc に定義していただく形で。
-
適当なdenops pluginを追加してvim起動
- (出力の問題でerror扱いですが)debugger用のwebsocket serverのメッセージが出ます。
-
chrome://inspect
をchromeで開く -
inspect
でdebugging windowを開く-
main
がdenops,worker-{n}
が各plugin(多分読み込み順)
-
-
一度denopsの処理をしてdevtoolにソースを読み込ませる
- デバッグしたいdenoのworkerのsourceの一部の処理が走ればなんでもいいです。devtoolを開いたタイミングでまだ処理が走っていたら不要かも。
-
確認したい処理を走らせる
-
丸に
II
で表されるボタンを押し、Pause on caught exceptions
にチェックを入れると例外送出時に止まります。 -
コードの停止したい部分のline numberをクリックするとbreakpointがつきます。つけた後に該当部分を呼ぶコマンド等を呼ぶとそこで止まります。停止時には一番左の停止ボタンが再生マークになり、クリックすることで処理を続行できます。
-
breakpointがクリック行とずれる場合は、
{}
で表わされるformatボタンを押し、formattedと名前についたタブを開くことで上手くいく場合があります。
というか最後のはこれをしないと上手く行かないしこれをすると100%上手くいきます、設定の問題?
下のものの検証中に確認して、コードとdebugger.enableの返り値のデータ(base64)と実際のコードがずれてるから、という説が濃厚になりました
今一応rustでdenoデバッグ用の簡易的なengineを試しに作ってます、それが出来たらchrome不要になるんじゃないでしょうか
追記:
この記事はdenopsv2より前の記事ですので適宜現在のバージョンに合わせて読み換えてください。
現在は g:denops#server#deno_argsに当たると思います。debugに必要なのはinspectフラグなのでそれを元の値(配列の末尾等)に追加するようにしてください。