以前このような記事を書いて、先日同じ手順を実行しようとしたらVisual Studio Codeは最早clrdbgをサポートしなくなりました、といった類のメッセージが出てデバッグできなくなっていました。
確認してみると、Visual Studio CodeのC#拡張の1.8でclrdbgがvsdbgにリプレースされていました。
omnisharp-vscode/CHANGELOG.md at master · OmniSharp/omnisharp-vscode · GitHub
詳細な手順はこちらにあります。
Attaching to remote processes · OmniSharp/omnisharp-vscode Wiki · GitHub
というわけで先のdocker上のプロセスにリモートデバッグする手順もclrdbgからvsdbgに置き換える必要があります。置き換える必要があるのは、まずdocker上にclrdbgをインストールする部分でvsdbgをインストールするコマンドに置き換えます。
$ curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
さらに、Visual Studio Code側のlaunch.jsonは次のようになります。パスをvsdbgに置き換えるのに加えて、"quoteArgs": false
と設定する必要があります。これを設定しないと勝手に実行するコマンドが"
で括られてしまうため、docker exec
コマンドの引数が正しく解釈されなくなってしまいます。
{ "version": "0.2.0", "configurations": [ { "name": ".NET Core Docker Remote Attach", "type": "coreclr", "request": "attach", "processId": "<PID>", "pipeTransport": { "pipeProgram": "docker", "pipeArgs": [ "exec", "-it", "<name>"], "debuggerPath": "/opt/app-root/src/vsdbg/vsdbg", "pipeCwd": "${workspaceRoot}", "quoteArgs": false }, "sourceFileMap": { "/opt/app-root/src": "${workspaceRoot}" } } ] }
以上を設定すればvsdbgで利用可能になるはずです。なお、vsdbgのライセンスなのですが、おそらくRuntimeのライセンスが該当するものと思われます。
omnisharp-vscode/OpenDebugAD7-License.txt at v1.9.0 · OmniSharp/omnisharp-vscode · GitHub
これを読む限り、Visual StudioやVisual Studio Code以外での利用が禁止されているのと、共有や公開が禁止されているようです*1。そのため、vsdbgを同梱したdocker imageを公開するのも禁止されているような気がします*2。個人的には改善を期待しています*3。
*1:解釈に関しては自己責任でお願いします
*2:Dockerfileに指定された手順を記載したDocker imageの公開がこのライセンスのshareやpublicに当たるかはよくわからない。が個人的にライセンスで危い橋は渡りたくないので
*3:Microsoftは今やOpen by defaultだ!と宣言していましたし https://www.forbes.com/sites/adrianbridgwater/2016/11/08/microsoft-is-now-open-by-default-says-xamarin-founder-miguel-de-icaza/#595733e97c40