いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-115 (VSCode(Gitpod)でGoプログラムのデバッグ時に標準入力がサポートされない?)

概要

忘れないうちにメモメモ。

最近、ちょっとVSCodeちゃんと使おうと思って、Goのプログラムをデバッグしてみたりしてたのですが 標準入力を受けて、動作するプログラムをデバッグ実行してみたところ、デバッグ起動はするのですが どこからも入力を入れることが出来ませんでした。

nodeとかだと、launch.jsonに externalConsole みたいなのを指定すると出来た記憶。

ですが、Goの場合は externalConsole を書くと validation で引っかかってエラーになります。つまり、externalConsoleはサポートされていない。

んで、情報を調べると以下を発見。

github.com

この issue 、作られたのが 2016年で、2019年までアクティブな状態だった模様。

ここを見ると、みんなサポートしてよーって言ってるのですが、デバッガのdelve自体がそもそも標準入力をサポートしていないっぽい。

https://github.com/microsoft/vscode-go/issues/219#issuecomment-530933960

んで、最終的に無理ってなってるみたいですねー。

一応、delve を headless でサーバ起動しておいて、そこにリモートデバッグしに行くとうまくいくみたいです。

https://github.com/microsoft/vscode-go/issues/219#issuecomment-449621513

ちょっと面倒ですね・・・正直。

Delve本体の方でも以下のissueがありました。

github.com

この中で use Delve's DAP implementation って書かれていて、それが以下。

github.com

DAPってDebugger Adapter Protocol の略なんですね。

そういえば、VSCode で デバッグ起動する際に GoGo (dap) って2つ出ていたような記憶。試していないですが。

で、自分の場合

いろいろ調べましたが、私の場合はサンプルを実行するプログラムがいて、そいつが標準入力をもらってサンプル探してきて実行するような作りにしていますので、標準入力は欲しい。

ですが、別にサンプル名だけわかればいいので、割り切って vscode ってオプション作って、そのオプション付与されているときはアプリと同じ場所に .target ってファイルを置いておいて、そこを読み込んで実行するって形にしました。

予め、launch.json の方には vscode オプションを渡して起動するようにしておけばオッケイ。標準入力を使わないようにしたので、普通にVSCodeとかGitpod (theia) 上でデバッグ出来るようになりました。古典的な方法ですが、自分の勉強用リポジトリなので、とりあえずヨシ。

github.com

参考情報

github.com

github.com

github.com

おすすめ書籍

自分が読んだGo関連の本で、いい本って感じたものです。

Go言語による並行処理

Go言語による並行処理

スターティングGo言語 (CodeZine BOOKS)

スターティングGo言語 (CodeZine BOOKS)

  • 作者:松尾 愛賀
  • 発売日: 2016/04/15
  • メディア: 単行本(ソフトカバー)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com