連載:Visual Studioデバッグ手法 第3回 Visual Studio 2010による高度なデバッグを極める 亀川 和史2010/10/01 |
|
|
■リモート・デバッグ
Visual Studioがインストールされていない環境で実行されているアプリケーションのデバッグを行わなくてはならない場合がある。例えば、サーバOSにしかインストールできないソフトウェアのデバッグを行わなければならないが、そのサーバに対してVisual Studioのインストールを行ってはならないといった状況の場合。また、特にアプリケーションをテスト・評価する際の環境には、(エンド・ユーザーの環境と同等の状態で評価するために)極力、ランタイム以外の開発環境(Visual Studio)などをインストールしない方がよい、といった場合などである。
このような場合、デバッグ対象のリモート・マシンにVisual Studioに付属しているリモート・デバッガをインストールすることで、ローカル環境と同様のデバッグを行うことができる。
下の画面の例のように、Visual StudioのDVDメディア内に「Remote Debugger」フォルダがある。フォルダ内には、x86用、x64用、IA64用と3種類の(リモート・デバッガの)セットアップ・プログラムが用意されている(※デバッグ対象のOSごとにセットアップ・プログラムが異なっているので、気を付けてほしい)。
Visual StudioのDVDメディア内の「Remote Debugger」フォルダ |
●リモート・サーバ側へのリモート・デバッガのインストール
以下では、Windows Server 2008 R2(x64)にリモート・デバッガをインストールする例を紹介する。Remote Debuggerフォルダにあるrdbgsetup_64.exeファイルを実行すると、以下のセットアップ画面が表示される。
リモート・デバッガのセットアップ画面:[Microsoft Visual Studio 2010 リモート デバッガー (x64) セットアップへようこそ]ページ |
[次へ]ボタンを押すと、下の画面のようなライセンス条項が表示される。(このライセンス条項に同意できたら)[同意する]チェックボックスをチェックすると、[インストール]ボタンが有効になるので、これを押す。
リモート・デバッガのセットアップ画面:[ライセンス条項]ページ |
以上の操作でインストールが開始され、それはすぐに終了し、次の画面が表示される。最後にその画面内の[完了]ボタンを押せば、[Visual Studio 2010 リモート デバッガー構成ウィザード]が自動的に起動する。
リモート・デバッガのセットアップ画面:[セットアップ完了]ページ |
引き続き、起動した[Visual Studio 2010 リモート デバッガー構成ウィザード]の[次へ]ボタンを押す。
[Visual Studio 2010 リモート デバッガー構成ウィザード]ダイアログ:[Visual Studio 2010 リモート デバッガー構成ウィザードにようこそ]ページ |
これにより、次の画面が表示される。ここで、「リモート・デバッガ・サービスを実行するかどうか」の設定を行う。通常は[Visual Studio 2010 リモート デバッガー サービスを実行する]チェックボックスをチェックして、[ユーザー名]と[パスワード]を指定する。なお、このサービスの実行は、デバッグ作業が終了した後は忘れずに停止しておこう。
[Visual Studio 2010 リモート デバッガー構成ウィザード]ダイアログ:[Visual Studio 2010 リモート デバッガー サービスを構成します]ページ |
この画面の入力例では、[ユーザー名]欄に「LocalSystem」が指定されている。LocalSystemとは、サービスが使用するAdministrator相当の権限である(参考:「Windows TIPS:サービスで使用される「System」「Local Service」「Network Service」アカウントとは?」)。
LocalSystemのまま[次へ]ボタンを押すと、ファイアウォールの構成画面が表示される。ここでは、通常、[リモート デバッガーへの接続をローカル ネットワーク (サブネット) 上のコンピューターのみに許可する]ラジオボタンを選択すればよい。ただし、デバッグ対象のコンピュータが異なるサブネットワーク上にある場合は、[リモート デバッガーへの接続をすべてのコンピューターに許可する]ラジオボタンを選択する必要がある。
[Visual Studio 2010 リモート デバッガー構成ウィザード]ダイアログ:[Windows ファイアウォールをデバッグ用に構成します]ページ |
最後に、この画面の[次へ]ボタンを押すと、ファイアウォールの構成が完了する。
●リモート・サーバ側のファイアウォールの構成
念のため、Windows Server 2008 R2の「サーバー マネージャー」の左側ツリーにある[構成]−[セキュリティが強化された Windows ファイアウォール]−[受信の規則]を選択すると、右側の[受信の規則]一覧に「Visual Studio デバッグ モニター」というファイアウォール項目が追加されていることが分かる(次の画面を参照)。より詳細に接続可能なクライアントを制御したい場合は、このファイアウォール項目を設定すればよい(参考:「Windows Server Insider:Windows 7のファイアウォール機能」)。
[Windowsファイウォール]の[受信の規則]一覧に追加されている「Visual Studio デバッグ モニター」ファイアウォール項目 |
●クライアント側のファイアウォールの構成
ファイアウォールの構成は、サーバ側だけではなく、クライアント側にも必要となる。構成を設定していない場合、クライアントのVisual Studioでのリモート・デバッグ開始時に明示的にファイアウォールの設定を行うかどうかを確認するダイアログが表示される。
[リモート デバッグのファイアウォールの構成]ダイアログ |
このダイアログで、[ローカル ネットワーク (サブネット) 上のコンピューターからのリモート デバッグは制限しない]ラジオボタンを選択した状態で[OK]ボタンを押すと、(次に示す)特権昇格の確認のためのダイアログが表示される。
[特権の引き上げが必要]ダイアログ |
このダイアログで[はい]ボタンを押せば、ファイアウォールが自動的に構成される。
●リモート・デバッガを明示的にプログラムとして実行する方法
上記の手順では、リモート・デバッガをサービスとして使用する方法を紹介した。だが、たまにしか使わず、サーバにローカル・ログオンできるアカウントであれば、リモート・デバッガを(サービスとして実行するのではなく)明示的にプログラムとして実行する方がセキュリティ的にもよい。
[スタート]メニューにはリモート・デバッガへのショートカットが登録されているので、サービスとして実行しなかった場合、リモート・デバッガを明示的に起動する。
[スタート]メニュー内に存在するリモート・デバッガへのショートカット |
なお64bit OS上では、(上に示すメニューから)[Visual Studio 2010 リモート デバッガー (x86)]を実行すると、以下のメッセージが表示され、「32bitプロセスのデバッグしかできない」という内容の警告が表示される。
64bit OS上で表示された「32bitプロセスのデバッグしかできない」という内容の警告 |
32bitのアンマネージ・コードや、明示的にx86向けに生成されたマネージド・アプリケーションをアタッチしてデバッグする場合には、32bit版のリモート・デバッガを使用しなければならないので、注意してほしい。「Any CPU」で生成されたアセンブリは64bit OSでは64bitコードとして実行されるため、64bit版のリモート・デバッガを使用すればよい。
デバッグを行うリモート・マシンには、実行に必要な.exeファイルと.dllファイル、.configファイルのほかに、ビルド時に生成された.pdbファイルも忘れずにコピーする必要がある。.pdbファイルもリモート・マシン上に存在しないと、正しくデバッグを行えないので注意してほしい。
これでリモート・デバッグを行う準備ができた。Windows Vista以降のOSでリモート・デバッグを行う場合、Visual Studioを[管理者として実行]しておく必要がある。今回は、前回の「Visual Studio 2010の新機能『IntelliTrace』」で使用したサンプルをWindows Server上で実行し、リモート・デバッグを行う。
●リモート・デバッガを行う方法
リモート・デバッグを行うには、次の画面のようにメニューバーから[デバッグ]−[プロセスにアタッチ]を選択する。
メニューバーから[デバッグ]−[プロセスにアタッチ]を選択 |
選択すると、次の画面のような[プロセスにアタッチ]するためのダイアログが表示される。このダイアログの[選択可能なプロセス]一覧に(既定の条件設定のままでは)ローカル・マシンのプロセス群が表示される。
今回はローカルとリモートでアカウントが異なっているため、[選択可能なプロセス]一覧にデバッグ対象となるプログラム(本稿の例では「sample1.exe」)が表示されていない。[すべてのユーザーからのプロセスを表示する]チェックボックスをチェックすると、以下のようにすべてのユーザーで実行されているプロセスが表示される。
すべてのユーザーで実行されているプロセスが表示されているところ |
「ユーザー名@マシン名」形式で[修飾子]を指定すれば、以下のように入力すると、リモート・マシンに接続できる。
「ユーザー名@マシン名」形式でのリモート・コンピュータ名の指定例 |
この状態で、[選択可能なプロセス]一覧から「sample1.exe」を選択して、[アタッチ]ボタンを押せばリモートで実行されているプログラムのデバッグの実行が可能になる。アタッチを行ったあとは、通常どおりのデバッグが可能になる。違和感もないはずだ。
・参考:マイクロソフト サポート オンライン:Visual Studio 2005 でリモート デバッグを実装する方法
INDEX | ||
[連載]Visual Studioデバッグ手法 | ||
第3回 Visual Studio 2010による高度なデバッグを極める | ||
1. .dllファイル(=アセンブリ)のデバッグ | ||
2. リモート・デバッグ | ||
3. 別サーバのIIS上で実行されるプロジェクトのデバッグ | ||
4. コードからのデバッガ制御/Internet Explorer 8の拡張機能デバッグ | ||
5. 並列プログラムの可視化機能 | ||
「連載:Visual Studioデバッグ手法」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -