knowbug icon indicating copy to clipboard operation
knowbug copied to clipboard

Debug Adapter Protocol (DAP) 対応

Open vain0x opened this issue 5 years ago • 2 comments

knowbug を DAP サーバーとして動作させることにより、Visual Studio Code (VSCode) 上でのデバッグを可能にします。

参考:

vain0x avatar Dec 22 '19 06:12 vain0x

全体の流れ

  • ユーザーが VSCode 上で F5 ボタンを押してデバッグ実行を開始しようとしたとします。
  • このとき VSCode は DAP アダプターのプロセスを生成し、標準入出力により通信します。DAP アダプターは、knowbug 側で用意したコンソールアプリです。(実装言語は不問)
  • 次に VSCode は DAP アダプターに "launch" リクエストを送ります。DAP アダプターは、これを受け取ったとき、HSP スクリプトのデバッグ実行を開始します。
  • HSP スクリプトのデバッグ実行の開始時に、HSP ランタイムはデバッガー (hsp3debug.dll = knowbug_dll) をロードして起動します。
  • 「何らかの方法」でデバッガーが DAP アダプターと接続し、通信して情報をやりとりをします。

起動順序:

  • VSCode → DAPアダプター → HSPランタイム → デバッガー

通信経路:

VSCode
    ↕ 標準入出力
DAP アダプター
    ↕ 何らかの方法 (名前付きパイプや TCP 通信など)
デバッガー
    ↕ 関数呼び出しなど (同一プロセスなので変数を共有可能)
HSP ランタイム

備考:

  • DAP アダプターからデバッガーが起動したときは、knowbug クライアント (knowbug_client.exe) はいらないため、起動しないようにします。

vain0x avatar Dec 22 '19 06:12 vain0x

実装

(予定)

  • DAPアダプター:
    • C++で書きます。
  • DAPアダプターとデバッガーの通信方法:
    • 名前付きパイプ (NamedPipe) を使います。

接続の流れ

  • DAPアダプターは起動後、標準入力を待機して、DAPメッセージを読んでいきます。
  • VSCode から ”launch" メッセージが来たら待機は終了し、名前付きパイプ P を作成して、HSP ランタイムを起動します。
  • HSP ランタイムが起動して、デバッガーが起動します。
  • デバッガーは起動時に、名前付きパイプ P を探します。
    • なければ従来通り、knowbug_client を起動して通信します。
  • 名前付きパイプ P があれば、接続します。
    • おそらく接続用のスレッドが必要です。
    • 接続の証に、launch リクエストのレスポンスを流します。
  • DAP アダプターは、標準入出力をパイプ P に転送するモードに移行します。
    • 標準入力とパイプ P の入力を待機します。
    • 標準入力から読み取ったデータは、そのままパイプ P に流します。
    • パイプ P から読み取ったデータは、そのまま標準出力に流します。
    • これにより、VSCode とデバッガーがパイプ P を通じて通信できます。
    • (HSP3 DEBUG GINGER の middle apdater はすでにこのような動作です。)
  • 後は DAP の通りに通信・終了すればよいです。

vain0x avatar Dec 22 '19 06:12 vain0x