Visual StudioでLinux C++アプリのクロス開発環境を作ってリモートデバッグする

どうも、TOMOZO(@TOMOZO)です。

Linux上で実行するC++アプリケーションを「Visual Studio 2017」上で開発しリモートデバッグする手順を纏めました。

スポンサーリンク

環境

  • Ubuntu 16.04 LTS
  • Windows 10 Home
  • Visual Studio 2017 バージョン15.9

「Visual Studio 2017」のIntelliSense機能を簡単に使うため、バージョンは15.7以降が望ましい。

どうやってリモートデバッグするのか?

  • C++のプロジェクトの作成はWindows上の「Visual Studio 2017」で行う。
  • もちろんソースの編集、管理も「Visual Studio 2017」で行う。
  • プロジェクトのビルド時、「Visual Studio 2017」はSSHでLinuxに接続しソースコード一式をLinux側にコピーし、実際のビルドはLinux側で実行される。
  • プロジェクトのデバッグ時、「Visual Studio 2017」はLinux側のGDBサーバーに接続し、GDB経由で「Visual Studio 2017」上でデバッグする。

てな感じ。

Linux側の設定

プログラムを実行するLinux側にリモートデバッグに必要なパッケージをインストールします。

$ sudo apt install openssh-server g++ gdb gdbserver
#必要に応じてsshの設定を行う(ここでは省略します)
$ sudo systemctl restart ssh

Windows側「Visual Studio 2017」の設定

「Visual Studio 2017 Community」をインストールする

公式サイト よりインストーラーをダウンロードして実行します。

ワークロードの画面で「C++によるLinux開発」にチェックを入れます。
こちらはVisual Studioインストール後でも同梱される「Visual Studio Installer」というアプリケーションから設定可能です。

プロジェクトを新規作成する

「Visual Studio 2017 Community」を起動します。

[ファイル]メニューの[新規作成]から[Visual C++]>[クロスプラットフォーム]>[Linux]を展開し、「C++によるLinux開発」を選択します。

リモートシステムの設定を行う

プログラムを実行するLinuxのSSH設定を行います。

[ツール]メニューの[オプション]から[クロスプラットフォーム]を展開し、[接続マネージャー]から[追加]をクリックします。

ホスト名にIPアドレス(もしくはホスト名)を、ユーザー名にSSHユーザーを入力します。

ここでIntelliSense用のヘッダーファイルがダウンロードされるようです。

プロジェクトの設定を行う

[プロジェクト]メニューの[プロパティ]から構成プロパティの[全般]を設定する。
(デフォルトでも問題なし)

デバッグの設定を行う

[プロジェクト]メニューの[プロパティ]から構成プロパティの[デバッグ]を設定する。
(デフォルトでも問題なし)

デバッグモードが「gdb」となっていること。

ソースコードを編集する

いつも通りソースコードを編集する。 文字コードは「UTF-8 BOMなし」にしておきましょう。

すみません、画像は「 UTF-8 BOM付き」になってます。正解は「Unicode (UTF-8 シグネチャなし) – コードページ 65001」を選択して下さい。

[ファイル]メニューの[名前を付けてファイルを保存]から[保存]の横のドロップダウンボタンをクリックしダイアログボックスから[エンコード付きで保存]する。

IntelliSense機能も使えます。便利です。

画像はBoostライブラリを使ったサンプルソースです。
Boostライブラリをリンクする場合明示的にリンクの指定が必要だったので設定しました。

クロスビルドしてリモートデバッグする

[ビルド]メニューからプロジェクトをビルドします。ビルドはLinux側で実行されます(デフォルトはg++)。

ログは[出力]ペインに出力されます。

実行してみます。[デバッグ]メニューから[デバッグの実行]をクリック(または「F5」を押す)します。

コンソール出力表示は[デバッグ]メニューの[Linux コンソール]をクリックします。

もちろんブレークポイントも設定できます。

これで簡単にクロスプラットフォーム開発(WindowsからLinuxC++アプリ開発)ができます。

Linux側にも実行ファイルが生成されて実行できる

Linux側ではデフォルトではホームディレクトリのprojects配下にプロジェクトのディレクトリが作られます。

$ cd ~/projects
$ ./ConsoleApplication1/bin/x64/Debug/ConsoleApplication1.out
Hello Boost C++.
Boost C++ Version:105800
Boost C++ Liblary version:1_58
Hello Ken.
Hello Ryu.
$ ldd ./ConsoleApplication1/bin/x64/Debug/ConsoleApplication1.out
linux-vdso.so.1 =>  (0x00007ffe4c75f000)
libboost_system.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 (0x00007f5b4e9c7000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5b4e645000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5b4e42f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5b4e065000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5b4de48000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5b4db3f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5b4ebcb000)

スポンサーリンク