うーん、さんざんWSLを推しておいてアレだけどもWSLでdlvが動かない。 dlv version等は大丈夫だが、dlv debugとやるとpromptが返ってこない。 一応、中で動いてはいるようでCtrl-Cを押すと対象プログラムが動いてその出力だけが出る状態。
このせいか、Remote WSL経由でのVisual Studio Codeで開発はできるがデバッグが動かない。
これに関して調べてみると少し古いが以下のような記述が存在。(2017/05/01)
Ubuntu Bash Windows 10 dlv debug session hanging · Issue #810 · go-delve/delve · GitHub
Delve is supported on linux and windows not on the linux-windows chimera. I'm not even sure ptrace works in that environment. AFAIK even go isn't officially supported there yet (or possibly ever): golang/go#16628, golang/go#17365
意訳すると
DelveはLinuxとWindowsはサポートしますがLinuxとWindowsのキメラはサポートしません。ptraceが動くのかさえわかりません。私の知る限りではgoも公式にはまだ(恐らく今後も)サポートしていません。
と、かなりつれない記載。
リンク先を辿ると以下のページに。
Debuggers (gdb, lldb) do not work · Issue #875 · microsoft/WSL · GitHub
で、こちらに以下の記述。こちらは極、最近の話。(2019/05/03)
Only gdb works, lldb still needs some work
gdbだけ動くようになったそうな。
恐らく問題はキメラな点でしょう。6月の終わりまでにはWSL2が出るはず。WSL2は本物のLinuxカーネルなのできっと動くはずです。後、1月程、待ちましょう :-)
Debugging Go Code with GDB - The Go Programming Language
初回起動時に以下のような警告が出たのですが、
warning: File "/usr/local/go1.12.5/src/runtime/runtime-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". To enable execution of this file add add-auto-load-safe-path /usr/local/go1.12.5/src/runtime/runtime-gdb.py line to your configuration file "/home/user/.gdbinit".
セキュリティ上の制約の模様です。素直に従って$HOME/.gdbinitを作ると以降、警告は出なくなりました。
デバッグも問題なくできました。
単純に自分の使い方の問題の可能性もまだあるのですが、もし自分の環境では動いたという人がいたらぜひ教えて下さい。ここに書いても反応はなさそうですが :-)