以前このような記事を書いて、先日同じ手順を実行しようとしたらVisual Studio Codeは最早clrdbgをサポートしなくなりました、といった類のメッセージが出てデバッグできなくなっていました。
tech.tanaka733.net
確認してみると、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。