1. はじめに
今回はVisual Studio 2017で開発したWindowsアプリケーションのデバッグをリモートから行う「リモートデバッグ」をご紹介します。
2. リモートデバッグとは
リモートデバッグとは、デバッグ対象のソフトが動くパソコンとは別のパソコンでVisual Studioを使ってデバッグする方法です。パソコン間はEthernetで通信出来るようにする必要があります。
Visual Studioがインストールされていないパソコンでトラブルが発生した場合や、余計なソフトをインストールしてはいけない場合でもデバッグすることが可能です。
大変便利な機能ですが、いざ使うとなると準備することが多く少々面倒です。
準備が出来て起動させても「デバッグ出来ません」などのエラーが出てデバッグ開始までたどり着くのに苦労することがしばしばあります。そのためかあまり活用されていない気がします。
しかし一度でも使うと普通にデバッグすることができることがわかり、使える!と言う感触を持てると思います。是非活用してもらいたいと思います。
今回はリモートデバッグを開始出来るまでの手順をシンプルにまとめます。
またデバッグ開始時に表示されることが多いエラーの原因と対処を説明します。
3. リモートデバッグまでの手順
以下にVisual Studio2017を用いてリモートデバッグをおこなうまでの手順を説明します。
まずパソコンの呼び方を定義します。
デバッグ対象ソフトが動くパソコンを「ターゲットPC」、Visual Studioを動かすパソコンを「ホストPC」と呼ぶことにします。
前提として、それぞれのPCが同一LAN上にあり、ホストPCからターゲットPCの共有フォルダを見られる必要があります。
図1. PCの接続構成と準備の概要
準備1:ホストPCからターゲットPCへアクセス出来るようにする
- 1.
- ターゲットPCに共有フォルダを作ります。後ほどリモートデバッガーのファイル一式、デバッグするEXEファイルおよびEXEが参照するデータファイルを入れるためのフォルダとして使います。
例えば“job”というフォルダを作って共有フォルダにします。
- 2.
- ホストPCとターゲットPCの両方の操作が出来るようにLCD・キーボード・マウスを配置します。
場所が離れていてターゲットPCを見られない時は、リモートデスクトップなどでホストPCからターゲットPCの画面を操作出来るようにします。
準備2:ホストPCからターゲットPCにリモートデバッグツールのフォルダをコピーする
- 1.
- ホストPCのVisual Studioをインストールしたフォルダの中にある「Remote Debugger」フォルダ以下のフォルダ(Appx、x64、x86)をまるごとコピーします(約70MB)。
準備1で作った共有フォルダ“job”の直下にコピーすると“job\ Remote Debugger”となります。
- 2.
- 場所がわからない時はエクスプローラーで「Remote Debugger」と入力して検索します。
- 3.
- 例えば以下の場所にあります。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger
準備3:ターゲットPCのソフト実行フォルダにデバッグするEXEファイルをコピーする
- 1.
- ソフト実行フォルダを共有フォルダにします。
例えば準備1で作った共有フォルダ“job”の直下に“_rdbg_\exeenv”を作ります。
- 2.
- ホストPCのVisual Studioで作ったEXEファイルを上記の共有フォルダへコピーします。
注意:元々ターゲットPCで動いていたEXEファイルや保管してあったEXEファイルも使えます。ただしホストPCのソースコードから生成されたEXEファイルである必要があります。
そうではない場合(EXEファイルとソースが対応していない)でもデバッガーは通常通り起動してデバッグ出来ている風にはなりますので注意して下さい。
準備4:ターゲットPCで「msvsmon.exe」を起動する
- 1.
- ターゲットPCが64ビットCPUの場合は「Remote Debugger\x64\」フォルダの「msvsmon.exe」を起動します。
64ビットアプリケーション用ですが32ビットアプリケーションのデバッグ時は自動的に32ビット用に切り替わります。
ターゲットPCが32ビットCPUの場合は「Remote Debugger\x86\」フォルダの「msvsmon.exe」を起動します。
- 2.
- 「msvsmon.exe」の起動によりホストPCのVisual Studioからの接続待ち状態になります。(図3参照)
- 3.
- 初めて「msvsmon.exe」を起動する時はリモートデバッグの構成ダイアログが表示されます(図2参照)。
ネットワーク環境に合わせてチェックボックスを設定し「リモートデバッグの構成」ボタンを押します。通常は上2つをチェックしておきます。
図2. リモートデバッグの構成画面
図3. リモートデバッガーの画面
準備5:Visual Studioでプロジェクト設定を変更する
言語によって設定が異なります。ここではC++での設定法を説明します。
- 1.
- ホストPCのVisual Studioでプロジェクトのプロパティをリモートデバッグ用に設定します。
- 2.
- メニューからプロジェクトのプロパティを選択します。またはAlt+F7を押してプロジェクトのプロパティ画面を開きます。
- 3.
- 構成プロパティの「デバッグ」へ以下の設定をします。
- 起動するデバッガー:リモートWindowsデバッガー
-
-
- リモートコマンド:ターゲットPCのデバッグするEXEをフルパスで指定します。準備3の共有フォルダを指定します。
-
-
- 作業ディレクトリ:ターゲットPCの作業ディレクトリを指定します。準備3の共有フォルダを指定します。ローカルPCでデバッグするときと同様にEXE実行時のカレントフォルダになります。
-
-
- リモートサーバー名: IPアドレスまたはパソコン名を指定します。
以上で準備完了です。
下図はターゲットPC(IPアドレス172.23.2.63)の“job\_rdbg_\exeenv”で動く“MFCApplication1.exe”と言うソフトのデバッグをするときの設定例です。
図4. プロジェクトのプロパティ画面
リモートデバッグの開始
準備が完了しましたのでホストPCのVisual Studio2017で通常どおりにメニューのデバッグの開始を選択するかF5キーを押してデバッグを開始させます。
自マシンでデバッグするのと比べてデバッグが開始されるまで数秒から数十秒間待たされますが、それ以降は自マシンでデバッグするときと同様にデバッグすることが出来ます。
ただし、準備やネットワークに問題がある場合は、ここでエラーが発生します。
次にそのエラーについて原因と対処法を説明します。
4.リモートデバッグ開始時に出るときがあるエラーと対処法
エラー画面が表示された場合の原因と対処法を説明します。
原因は下記以外にもネットワークに問題がある場合もあります。
エラー1「指定されたファイルが見つかりません」
図5. エラー画面「指定されたファイルが見つかりません」
- 原因:
- 図4のリモートコマンド(フルパス+EXE名)の指定が間違っている可能性があります。
- 対処:
- 正しいフルパス+EXE名を指定します。上図では”exe”が”exex”になっています。
エラー2「有効な作業ディレクトリではありません」
図6. エラー画面「有効な作業ディレクトリではありません」
- 原因:
- 指定された作業ディレクトリが見つかりません。図4で指定した作業ディレクトリの設定が間違っています。
- 対処:
- 図4の作業ディレクトリの設定を見直して修正します。上図では”exeenv_”となっていますが“_”は不要です。
エラー3「デバッグを開始でません」
図7. エラー画面「デバッグを開始でません」
- 原因1:
- ターゲットPCでリモートデバッガー(msvsmon.exe)が起動されていません。この場合は図7の前に「図8操作に予想以上に時間が掛かっています」が数十秒表示されます。
図8. 「操作に予想以上に時間が掛かっています」画面
- 対処1:
- ターゲットPCでリモートデバッガーを起動します。
- 原因2:
- ファイアウォールの設定により通信が制限されています。
- 対処2:
- 図9の「Windowsファイアウォールによるアプリケーションの許可」画面を開き「Visual Studio リモートデバッガー」の設定を見直します。
この画面を出すにはスタートメニューのプログラムとファイルの検索で「firewall」と入力します。その候補の中に表示されます(図10参照)。
図9. Windowsファイアウォールによるアプリケーションの許可画面
図10. スタートメニューの検索ボックスへ「firewall」と入力したときの候補表示
5. おわりに
今回はVisual Studio 2017を使ったリモートデバッグを紹介しました。
冒頭でも説明しましたが、リモートデバッグはVisual Studioがインストールされていないパソコンでトラブルが発生した場合や、余計なソフトをインストールしてはいけない場合、さらに現場のシステムでしか起こらないトラブルを調査するときなど様々なケースで活用出来ます。
さらに、現場のパソコンのデバッグを遠隔から行うことも出来ます。もちろんこの場合は専用回線やVPNなどを使い安全な接続を確立出来ることが前提となります。
この他にもリモートデバッグをうまく活用出来るケースがまだまだあると思います。
本レポートを参考に活用して頂ければ幸いです。
(N.K.)