「Visual Studio Code デバッグ技術」読んだ

技術書典"3"で購入した 『Visual Studio Code デバッグ技術』を読みました。

TOC

01: デバッグ機能とは

  • Visual Studio, Vim, Atomとの違いについて。基本機能をVSらしさのみに絞って、それ以外を拡張機能で補う形にすることでエディタ自体の習熟しやすさを高めている。
  • 著者さんがVimキーバインドを実現するVimStyleというVSCode拡張を公開されているらしい。あとで試す。
  • 本書におけるデバッグ機能についての定義。中断、変数の確認、コールスタックの確認、ステップ実行ができること。
  • GNUデバッガについて。GDBとDDDでCUIコア機能とGUI機能で分かれており、VSCodeもそのようにできてる。
  • VSCodeデバッグ機能のアーキテクチャについて。言語のデバッガとVSCcode Debug Protocolでやり取りする拡張―Debugger Adapter―を言語ごとに用意することで、多くの言語に対応している。
  • DDDに相当するものがDebugger UIとDebugger Adapter、GDBに相当するものが各言語ごとのデバッガ

02: Debugger UI

  • 虫マークを選択するとデバッガが表示される。各項目の説明。
  • ブレークポイントは行、列、条件(評価式と通過回数)、関数、その他例外など言語特有のものに張れる。
  • データインスペクション、コールスタック、デバッグコンソール、コードレンズの使い方。
  • launch.jsonについて。デバッガを起動するにはこれが必要。snippetから言語ごとの設定項目を出せるので、そこから作り込んでいく。project.jsonみたいなもの?
  • マルチターゲットデバッグ、一度に複数のデバッガを実行できる。そんなことできるの、すごい。

03: デバッグフレームワーク

04: 各言語のデバッグ性能の評価項目

  • OS別、ブレークポイント、ステップ実行、変数、コールスタック、評価式、実行対象で言語ごとに性能評価
  • 著者の環境でデバッグできなかった言語について。

各言語の評価については省略。
ステップバックや逆行ができるデバッガがいなかったのでアレはやはり大変な機能なのだろうかと思った。もしくはVSCodeがUI用意してないから実装がめんどいとか。

総評

なんでもできそうだがやっぱり言語によっては簡単には動かなさそう。でも、 VSCodeデバッグ機能は見た目ほど簡単には動かない事が多い。(中略)しかし、一度 .vscode/launch.json に記述してプッシュすれば、共同開発者の皆がデバッグが可能になる非常に心強いツールである。 と著者さまが言っていてなるほどと思いチャレンジしてみたくなった。
素晴らしい本をありがとうございました。

実際にNode.jsを触る機会があったのでlaunchi.jsonを書いてデバッガを動かしてみたところ、あっさり行ってくれて、エラー表示もブレークポイントもちゃんと動いてくれました。ただ、nodeは言語機能やタスクランナーでプロジェクトのタスク実行機能を用意しているので、そちらとの兼ね合いで悩みました。最初の設定の手間さえかければ使えるな、と思います。

追加情報があれば今後githubに公開する予定とのことなので、調べてみました。これかな → "vscode-debug-specs

おわりに

気づいたら4ヶ月以上経ってました、はい…

最近は休職したり日報書いたりしていました。