Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Debug Adapter Protocol (DAP) 対応 #90

Open
vain0x opened this issue Dec 22, 2019 · 2 comments
Open

Debug Adapter Protocol (DAP) 対応 #90

vain0x opened this issue Dec 22, 2019 · 2 comments

Comments

@vain0x
Copy link
Owner

vain0x commented Dec 22, 2019

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

参考:

@vain0x
Copy link
Owner Author

vain0x commented Dec 22, 2019

全体の流れ

  • ユーザーが 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
Copy link
Owner Author

vain0x commented Dec 22, 2019

実装

(予定)

  • 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 の通りに通信・終了すればよいです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant