WSLでGoのdlvが動かないw

うーん、さんざん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はLinuxWindowsはサポートしますがLinuxWindowsのキメラはサポートしません。ptraceが動くのかさえわかりません。私の知る限りではgoも公式にはまだ(恐らく今後も)サポートしていません。

と、かなりつれない記載。

リンク先を辿ると以下のページに。

Delve hangs and does not show a prompt on Ubuntu running on Windows using the Subsystem for Linux. · Issue #1235 · go-delve/delve · GitHub

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月程、待ちましょう :-)

gdbでのデバッグ方法は公式にて詳細な説明有り。

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を作ると以降、警告は出なくなりました。

デバッグも問題なくできました。

単純に自分の使い方の問題の可能性もまだあるのですが、もし自分の環境では動いたという人がいたらぜひ教えて下さい。ここに書いても反応はなさそうですが :-)