連載:Visual Studioデバッグ手法

第3回 Visual Studio 2010による高度なデバッグを極める

亀川 和史
2010/10/01
2011/02/21 更新(Visual Studio 2010 SP1対応)

コードからのデバッガ制御

 「WCFのWebサービス・タイムアウトを、(通常実行時はそのままで)デバッガ実行時のみ長くしたい、でもデバッグ実行のたびにapp.configファイルの内容を書き換えるのは面倒……」という場合、一般的なコードではないが、Debuggerクラス(System.Diagnostics名前空間)にあるIsAttachedプロパティを使えば、デバッグ実行中のみ、コードからタイムアウトを制御できる。具体的には次のようなコードになる。

if (Debugger.IsAttached == true) {
  // デバッガ実行中のみタイムアウトを1分に変更する
  svc.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 1, 0);
}
If Debugger.IsAttached Then
  ' デバッガ実行中のみタイムアウトを1分に変更する
  svc.Endpoint.Binding.ReceiveTimeout = New TimeSpan(0, 1, 0)
End If
WCFのWebサービス・タイムアウトをデバッグ時のみ延長するサンプル・コード(上:C#、下:VB)

 Debugger.IsAttachedプロパティは、現在、デバッガで実行しているかどうかを判定する。デバッグ実行中かどうかで処理を切り替えたい場面など、使いどころを適切に押さえれば、便利な機能である。

 例えば下記のコードでは、デバッグ実行していない場合はJITデバッガ・ダイアログを起動し、デバッグ実行中であればブレークポイントとして動作する。

if (Debugger.IsAttached == true) {
  // デバッガ実行中であればブレークポイントとして動作する
  Debugger.Break();
} else {
  // 通常実行中であればJITデバッガ・ダイアログが起動する
  Debugger.Launch();
}
If Debugger.IsAttached Then
  ' デバッガ実行中であればブレークポイントとして動作する
  Debugger.Break()
Else
  ' 通常実行中であればJITデバッガ・ダイアログが起動する
  Debugger.Launch()
End If
デバッグ実行中かどうかで処理を変えるサンプル・コード(上:C#、下:VB)

 もちろん、「Debugger.Launch()」というコードを残したまま、製品としてリリースしないように気を付けてほしい。

Internet Explorer 8の拡張機能デバッグ

 Internet Explorerの拡張機能(=ブラウザー・ヘルパー・オブジェクトやActive Xコントロール)のデバッグを行う方法を紹介する。

 今回はMFC(=C++用のクラス・ライブラリ)で簡単なActive Xコントロールを作成して、Internet Explorerでデバッグを行う。Active Xコントロールは単独では実行できないため、適当なHTMLファイルにActive Xコントロールを読み込ませ、Internet Explorerを起動してデバッグする必要がある。今回は単にだ円を表示するActiveXコントロールを作成した。

ActiveXコントロールを読み込むためのHTMLファイルの準備

 ActiveXコントロールを読み込むためのHTMLファイルが必要になるので、今回は同じソリューション内にASP.NET Webアプリケーションを作成した。もちろんすでにActive Xコントロールを読み込むためのHTMLファイルが存在する場合、そちらを使えばよい。今回はActive Xコントロールを読み込むために、default.aspxファイルの内容を以下のように修正した。

<h2>
  サンプルActiveXのテストページへようこそ
</h2>
<p>
<object classid="clsid:D5959D36-556D-45B5-A251-6FE247F16134" /> 
</p>
ActiveXコントロールを読み込むためのHTMLファイル「default.aspx」の修正内容
classid属性の値(太字部分)には、Active XのGUIDを指定する。このGUIDはMFCのActive Xプロジェクトを作ったときに自動的に生成される。具体的には、コントロール・プロジェクトの拡張子「.idl」のファイルに記載されている。

 Active Xコントロールのデバッグを行う場合、当然ながらInternet Explorerを使用することになる。今回はASP.NET Webアプリケーションを使用するので、Visual Studioから使用するブラウザを変更できる(参照:「.NET TIPS:[ASP.NET]Internet Explorer以外でWebアプリケーションをデバッグするには?[VS 2005、VS 2008]」)。この機能は、(標準で利用するブラウザをInternet Explorerにしたまま)デバッグのときだけInternet Explorerを使いたいという場合には便利だろう。

ActiveXコントロールをデバッグするための設定

 Active Xコントロールを読み込むHTMLファイルをVisual Studioデバッガでデバッグするには、Active Xコントロールのプロジェクト(本稿の例では「SimpleControl」)のプロパティを開いて、次の画面のように、[起動するデバッガー]コンボボックスの選択値を「Webブラウザー デバッガー」に変更し、[HTTP URL]欄に先ほど作ったASP.NET Webアプリケーションを実行する開発用WebサーバのURLもしくは、IISで提供されているURLを記入する。

Active Xコントロール・プロジェクトのプロパティ・ページ
Active Xコントロールを読み込むHTMLファイルをVisual Studioデバッガでデバッグするための設定を行っているところ。
  [起動デバッガー]コンボボックスの値を「Webブラウザー デバッガー」に変更する。
  [HTTP URL]欄にWebサーバのURLを入力する。

 ASP.NET WebアプリケーションのVisual Studio開発用サーバのポート番号は、次の画面のように、ASP.NET Webアプリケーション・プロジェクト側のプロジェクト・プロパティの[Web]タブで指定できる。

ASP.NET Webアプリケーションのプロジェクト・プロパティの[Web]タブ
ASP.NET WebアプリケーションのVisual Studio開発用サーバのポート番号を設定しているところ。
  Visual Studio開発用サーバを使用する場合は[Visual Studio 開発サーバーを使用する]ラジオボタンを選択する。その配下の設定において、[ポート番号の自動的割り当て]ラジオボタンが(既定で)選択されているため、Webアプリケーションの起動ごとにランダムでポート番号が設定される。このような設定になっていると、Active Xコントロールの設定もその起動のたびに変更する必要があるため、[ポートを指定する]ラジオボタンを選択して、ポート番号を固定する。
  (Visual Studio開発用サーバを使用せずに)Windows 7などのIISを使用する場合は、[IIS Webサーバー の使用]ラジオボタンを選択する。ただし、IISに仮想フォルダを作るためにはVisual Studioの特権昇格が必要になる。ASP.NETプロジェクト・ファイルも昇格しなくては読み込めなくなってしまうため、注意してほしい。

 また、Visual Studio 2010 SP1ではIIS Express 7.5に標準対応したので、同じく[Web]タブからこれを簡単に使用することができる。

ASP.NET Webアプリケーションのプロジェクト・プロパティの[Web]タブ(Visual Studio 2010 SP1適用済みの場合)
Visual Studio 2010 SP1を適用している場合は、[Use IIS Express]チェックボックスにチェックを入れると、IIS Express 7.5をWebサーバとして利用できる。

 なお、IIS Express 7.5そのものは、WebMatrixをインストールするか、Microsoftダウンロード・センターからダウンロードする必要がある。IISとIIS Expressの機能差についての説明は割愛する。詳しくは、下記のブログ記事を参照してほしい。

 IIS Express 7.5を利用するメリットは、標準ユーザーのままで(つまりVisual Studioを管理者として起動しなくても)ほとんどの操作が可能になっていることだ。特にWebサイトの作成が標準ユーザーのままで可能となることは、非常にありがたい。

 以上でデバッグの準備が完了した。

ActiveXコントロールのデバッグ手順

 実際にデバッグを行うには、必要なところにブレークポイントを設定する。今回は、描画処理(OnDraw関数内)にブレークポイントを設定した。

Active Xコントロールのコードに対するブレークポイントの設定
この例では、描画処理(OnDraw関数内)にブレークポイントを設定している。

 後はActive Xコントロールのプロジェクトをスタートアップ・プロジェクトに設定して、[F5]キーでデバッグ実行すればよい。筆者の環境では開始時に以下のダイアログが表示されたが[継続]ボタンを押して続ければ、デバッグ処理そのものは可能であった。

デバッグ開始時に表示されたダイアログ

 描画処理のタイミングで、ブレークポイントの位置で実行が停止する。

ブレークポイントの位置で実行が停止

 実行結果は以下のようになる。Active Xでだ円が描画される個所である。

Active Xコントロールを含んだASP.NETアプリケーション
赤い枠の部分が、追加したActive Xコントロールが描画しただ円。


 INDEX
  [連載]Visual Studioデバッグ手法
  第3回 Visual Studio 2010による高度なデバッグを極める
    1. .dllファイル(=アセンブリ)のデバッグ
    2. リモート・デバッグ
    3. 別サーバのIIS上で実行されるプロジェクトのデバッグ
  4. コードからのデバッガ制御/Internet Explorer 8の拡張機能デバッグ
    5. 並列プログラムの可視化機能

インデックス・ページヘ 「連載:Visual Studioデバッグ手法」

更新履歴
【2011/02/21】

 Visual Studio 2010 SP1に関する説明を追記しました。




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