設定 - リモートデバッグ
概要
Visual Studio 2017以降では、Linuxで実行されている.NET CoreプロセスにSSH経由でアタッチできる。
ここでは、デバッグのセットアップ方法とデバッグ方法について記載する。
リモートマシンの設定
GDBとGDB Serverのインストール
Visual Studioからリモートデバッグができるように、CentOSまたはSUSEに必要なソフトウェアやライブラリをインストールする。
# CentOS 7 sudo yum install gcc make rsync gdb gdb-gdbserver zip curl # CentOS 8 sudo dnf install gcc make rsync gdb gdb-gdbserver zip curl # SUSE sudo zypper install gcc make rsync gdb gdb-gdbserver zip curl
Visual Studio 2019を使用している場合は、以下のライブラリもインストールする。
# CentOS 7 sudo yum install ninja-build # CentOS 8 sudo dnf install ninja-build # SUSE sudo zypper install ninja-build
SSHサーバの設定
SSHサーバは、CentOSやSUSEを最小インストールした場合でもOpenSSHがインストールされるため、追加でインストールする必要はない。
また、初期設定では、パスワード認証方式でのログインが可能となっている。
したがって、最低限必要な設定としては、セキュリティを考慮して、以下のようにrootアカウントの直接ログインの禁止設定を実施しておけばよい。
sudo vi /etc/ssh/sshd_config # /etc/ssh/sshd_configファイル PermitRootLogin no # 38行目
設定を反映させるため、sshdを再起動する。
sudo systemctl restart sshd
SSHの自動起動設定を行う。
sudo systemctl enable sshd
Firewalldを有効にしている場合は、SSHサービスの許可が必要である。
なお、SSHのポート番号は、22/TCPを使用する。
sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload
Visual Studioの設定
Visual Studioのセットアップ
- C++
- Visual Studioインストーラを起動する。
[Visual Studioインストーラ]画面にある[変更]ボタンを押下して、[ワークロード]タブを選択する。 - [その他のツールセット]項目から、[C++によるLinux開発]ワークロードを選択する。
- もし、IoTまたは組み込みのプラットフォームをターゲットにしている場合は、画面右の[インストールの詳細]ウィンドウに移動して、
[C++によるLinux開発]の下で[オプションコンポーネント]を展開して、必要なコンポーネントを選択する。
[変更]ボタンを押下してインストールを行う。
- Visual Studioインストーラを起動する。
- C#(.NET Core)
- Visual Studioインストーラを起動する。
[Visual Studioインストーラ]画面にある[変更]ボタンを押下して、[ワークロード]タブを選択する。 - [ASP.NETとWeb開発]ワークロードまたは[.NET Coreクロスプラットフォーム開発]ワークロードのいずれかをインストールする。
- Visual Studioインストーラを起動する。
プロジェクトの新規作成
- C++
- [ファイル]メニュー - [新規作成] - [Visual C++] - [クロスプラットフォーム] - [Linux]を展開し、C++によるLinux開発を選択する。
- C#(.NET Core)
- [ファイル]メニュー - [新規作成] - [Visual C#] - [コンソールアプリケーション]または[クラスライブラリ]を選択する。
プロジェクトの全般設定
- C++
- [プロジェクト]メニュー - [プロパティ]を選択する。
(または、ソリューションエクスプローラーでプロジェクトを右クリックして、コンテキストメニューから[プロパティ]を選択する) - [プロジェクトのプロパティ]画面が表示されるので、画面左の[全般]を選択して、画面右の[構成の種類]プルダウンから、開発するファイルの種類を選択する。
- 既定では、実行可能ファイル(.out)が選択されている。
もし、スタティックライブラリまたはダイナミックライブラリの開発や既存のMakefileを使用する場合は変更する。
- [プロジェクト]メニュー - [プロパティ]を選択する。
リモート接続の設定
- C++
- 接続先のLinuxを指定するダイアログ(Connect to Remote System)が表示されるので次のように入力する。
- Host Name : ホスト名またはIPアドレス
- Port : 22
- User Name : CentOSまたはSUSEで使用しているユーザ名
- Password : CentOSまたはSUSEで使用しているユーザ名のパスワード
- ※注意
- 次回からは、自動的にリモート接続される。
- リモート接続の再設定は、Visual Studioの[ツール]メニュー - [オプション] - [クロスプラットフォーム]からコネクションマネージャーで再設定できる。
- 接続先のLinuxを指定するダイアログ(Connect to Remote System)が表示されるので次のように入力する。
- C#(.NET Core)
- Visual Studioにおいて、[デバッグ] - [プロセスにアタッチ]を選択する。
- [接続の種類]プルダウンを[SSH]を選択して、[接続ターゲット]項目にリモート先PCのIPアドレスまたはホスト名を入力する。
- デバッグプロセスは、一意のプロセス名またはdotnetという名前のプロセスで実行される。
- デバッグプロセスを探すには、[タイトル]列を確認する。この列には、デバッグプロセスのコマンドライン引数が表示される。
- SSH経由のリモート先PCからのプロセスの一覧が、[プロセスにアタッチ]画面に表示される。
- デバッグプロセスにアタッチするには、[アタッチ]ボタンを押下する。
- 表示される画面において、デバッグするプログラムの種類を選択する。例えば、[マネージド(Unix用.NET Core)]等を選択する。
- Visual Studioのデバッグ機能を使用して、プログラムをデバッグする。
リモートデバッグの実行
実行する前に、[デバッグ]メニューからLinux Consoleウインドウを表示する。
リモートGDBデバッガを実行すると、実行結果がLinux Consoleウインドウに表示される。
備考
CentOSまたはSUSEのホームディレクトリ直下にprojectsディレクトリが作成されて、そこにプロジェクトが配置される。
日本語を使う時の問題点
ソースファイル(Visual Studio側もLinux側も)がShift JISで保存されるため文字化けが起きる。
外部エディタにてUTF-8で再保存して(Visual Studio側)、ビルドすると文字化けしない。