銀の光と碧い空

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

VisualStudio 2017 RC3 から .NET Core on RHEL にリモートデバッグする

VisualStudio 2017 RC3からリモートデバッグのプロトコルにSSHが選択できるようになり、Linux上の.NET Coreプロセスにアタッチすることができるようになりました*1

blogs.msdn.microsoft.com

これは、以前ブログに書いたdocker上の.NET Coreプロセスをリモートデバッグするのと同じ仕組みだと思われます。

tech.tanaka733.net

で、MSDNブログではUbuntuが取り上げられていますが、RHELでもできることを確認したのでその手順をまとめておきます。現状では、VisualStudioで発行したバイナリを転送して実行するのが一番速そうです。これはWindowsとRHELの.NET Core SDKがまだVisual Studio 2017 RC3のcsprojの構造に追い付いていないようで、VisualStudioで認識できるプロジェクトをdotnetコマンドでビルドできなかったからです*2

まず、RHEL側の準備ですが、.NET Core 1.1をインストールしておきます。

Chapter 1. Install .NET Core 1.1 on Red Hat Enterprise Linux - Red Hat Customer Portal

つぎに、以前dockerにリモートデバッグする場合はclrdbgをインストールしておきましたが、新しいVisualStudioの機能を使う場合は接続時に必要に応じてインストールしてくれるので事前にインストールしておく必要はありません。その代わりインストールに必要なコマンドとして、unzipとcurlもしくはwgetのインストールが必要です。curlやwgetは割とインストールされていることが多いと思いますが、unzipが入っていないことがあるのでいれておきましょう。sshサーバーの設定も必要なので、こちらを参考にどうぞ。

9.2. OpenSSH の設定

$ sudo yum install openssh-server unzip curl

次にVisualStudio側でプロジェクトを作成します。今回は.NET Core 1.1でASP.NET Core Webの空アプリケーションを作成しました。作成した後、プロジェクトを右クリックして「公開」を選び、発行先にフォルダーを選びます。

f:id:tanaka733:20170127224043p:plain

デフォルトだとReleaseビルドになるので、Debugビルドに直しておきます。

f:id:tanaka733:20170127223838p:plain

f:id:tanaka733:20170127223900p:plain

あとは発行ボタンを押して実行用のバイナリを生成します。

f:id:tanaka733:20170127223920p:plain

で、バイナリ一式をRHELに転送します。面倒なのでプロジェクトまるごとSCPで転送しました。WindowsでSSHするのはBash on Ubuntu on Windowsを使いました。/mnt/<ドライブレター> 以下にWindowsのファイルシステムが見えます。

# scp -r WebApplication1 <user>@<server>:~/

あとはRHEL側に入ってdotnetコマンドで実行します。

$ dotnet WebApplication1/bin/Debug/netcoreapp1.1/WebApplication1.dll

VisualStudioに戻って、デバッグ>プロセスにアタッチを選びます。出てきた画面でRHELサーバーのホスト名を入力しEnterを押します。検索ボタンを押すのではないのに注意しないといけないのは今までと同じです。

f:id:tanaka733:20170127224735p:plain

するとこんな画面になるので、Password認証かPrivateKey認証を選んで接続します。その後プロセスの一覧が表示されるので、該当のプロセスを選択してアタッチします。

f:id:tanaka733:20170127224637p:plain

最後にコードの種類を聞かれるので、.NET Core on Unix を選びます。

f:id:tanaka733:20170127224906p:plain

これでリモートデバッグが開始されるので、あとはブレークポイントを置いたりできます。ちなみにunzipコマンドが入っていなかったりするとこの時点でエラーになってデバッグ出力の欄に表示されるので、確認しましょう。

*1:ブログのタイトルにPrivateがついていたり、1/31になっているのが気にならないことはない

*2:そのうち改善されるでしょう