連載: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上で実行し、リモート・デバッグを行う。

リモート・デバッガを行う方法

 リモート・デバッグを行うには、次の画面のようにメニューバーから[デバッグ]−[プロセスにアタッチ]を選択する。

メニューバーから[デバッグ]−[プロセスにアタッチ]を選択

 選択すると、次の画面のような[プロセスにアタッチ]するためのダイアログが表示される。このダイアログの[選択可能なプロセス]一覧に(既定の条件設定のままでは)ローカル・マシンのプロセス群が表示される。

[プロセスにアタッチ]ダイアログ
[選択可能なプロセス]一覧から、デバッグしたいプロセスを選択し、[アタッチ]ボタンをクリックすると、デバッグが開始される。
  [トランスポート]コンボボックスでは、接続方法(既定値|リモート)を選択する。「既定値」はリモート・デバッグ・モニターを使用した、認証ありの接続方法。「リモート」は認証なしで接続する場合のみ使用する。
  [修飾子]欄には、リモート・コンピュータの名前を指定する。リモート・コンピュータで、ローカル・コンピュータとは異なるユーザーで認証しなければならない場合は、
  「ドメイン名\ユーザー名@コンピュータ名」
の形式で指定する必要がある。Active Directoryに参加していないPCに接続する場合は、
  「ユーザー名@コンピュータ名」
となる。パスワードとユーザー名が双方のマシンで一致していれば、そのまま接続できる。
  [アタッチ先]欄では、アタッチするコードの種類を選択する。通常は「自動」のままでよいが、明示的に除外したい場合は、[選択]ボタンから表示されるダイアログでデバッグ対象から除外できる。
  [選択可能なプロセス]一覧には、対象コンピュータで稼働しているプロセス群が表示される。
  ローカルのVisual Studioとリモートでデバッグ対象プログラムを実行しているアカウントが異なる場合、[すべてのユーザーからのプロセスを表示する]チェックボックスをチェックする必要がある。
  表示を更新する。
  選択したプロセスのデバッグを開始する。

 今回はローカルとリモートでアカウントが異なっているため、[選択可能なプロセス]一覧にデバッグ対象となるプログラム(本稿の例では「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デバッグ手法」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH