Open7

debugging denops.vim

kkiyama117kkiyama117

はじめに

  • 記事にするにはまだ確立された手法ではないこと、質問や追記がしやすいことからスクラップを選択。
  • ある程度まとまったら記事にします(いつになるやら)。
  • vimド素人、TSは4年程しか使ってないのでかなりガバい自覚があります。むしろ皆さんに聞いて手法を良くしたいです、ご協力宜しくお願いします。

導入した(いと思った)きっかけ

vscodeやwebstormのようなbreakpointでとめて変数を眺めるデバッグをdenopsでもしたかった。

備考

  • 質問はここかvim-jp slack で受け付けます。

ISSUES

  • vimやdenopsで完結する環境作り
    • 多分 v8 inspector対応のrunnereditorがいる
kkiyama117kkiyama117

手順(chrome devtool使用時)

  1. denopsの動作環境を用意

  2. let g:denops#server#service#deno_args = get(g:,
    \ 'denops#server#service#deno_args', [
    \ '-q',
    \ '--no-check',
    \ '--unstable',
    \ '-A',
    \ ]) + ['--inspect']
    を指定

  3. 適当なdenops pluginを追加してvim起動

    • (出力の問題でerror扱いですが)debugger用のwebsocket serverのメッセージが出ます。
  4. chrome://inspect をchromeで開く

  5. inspectでdebugging windowを開く

    • mainがdenops,worker-{n}が各plugin(多分読み込み順)
  6. 一度denopsの処理をしてdevtoolにソースを読み込ませる

    • デバッグしたいdenoのworkerのsourceの一部の処理が走ればなんでもいいです。devtoolを開いたタイミングでまだ処理が走っていたら不要かも。
  7. 確認したい処理を走らせる

    • 丸にIIで表されるボタンを押し、Pause on caught exceptionsにチェックを入れると例外送出時に止まります。

    • コードの停止したい部分のline numberをクリックするとbreakpointがつきます。つけた後に該当部分を呼ぶコマンド等を呼ぶとそこで止まります。停止時には一番左の停止ボタンが再生マークになり、クリックすることで処理を続行できます。

    • breakpointがクリック行とずれる場合は、{}で表わされるformatボタンを押し、formattedと名前についたタブを開くことで上手くいく場合があります。

kkiyama117kkiyama117

というか最後のはこれをしないと上手く行かないしこれをすると100%上手くいきます、設定の問題?

kkiyama117kkiyama117

下のものの検証中に確認して、コードとdebugger.enableの返り値のデータ(base64)と実際のコードがずれてるから、という説が濃厚になりました

kkiyama117kkiyama117

今一応rustでdenoデバッグ用の簡易的なengineを試しに作ってます、それが出来たらchrome不要になるんじゃないでしょうか

kkiyama117kkiyama117

追記:
この記事はdenopsv2より前の記事ですので適宜現在のバージョンに合わせて読み換えてください。
現在は g:denops#server#deno_argsに当たると思います。debugに必要なのはinspectフラグなのでそれを元の値(配列の末尾等)に追加するようにしてください。