銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

clrdbg は vsdbg にリプレースされました

以前このような記事を書いて、先日同じ手順を実行しようとしたら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

*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