Azure Web Sites でのリモート デバッグの概要 (パート 2) - リモート デバッグの中身
このポストは、5 月 7 日に投稿された Introduction to Remote Debugging Azure Web Sites part 2 – Inside Remote debugging (著者: Jaime Espinosa) の翻訳です。
編集メモ: 今回は、Azure Web Sites チームでプログラム マネージャーを務める Jaime Espinosa による記事をご紹介します。
このシリーズの前回の記事では、Azure Web Sites のリモート デバッグの概要を紹介し、Visual Studio を接続してデバッグを実行する方法について説明しました。Azure Web Sites のリモート デバッグ機能をフルに活用するには、そのしくみを理解することが最も重要です。この記事では、リモート デバッガーを構成するサーバー側およびクライアント側の要素の詳細や、シンボルのデバッグについて見ていきます。
サーバー側: リモート デバッグ機能を「オン」にする
リモート デバッグ機能はサーバー側で有効にする必要があります。機能を有効にすると接続に必要な TCP/IP ポートが開かれ、タイマーが起動し、48 時間後に自動的に無効になります。セキュリティおよびパフォーマンス上の理由から、この 48 時間の時間制限が設定されています。この機能は必要に応じて何回でも有効にすることができますが、デバッグを行っていない場合は無効にしておくことを推奨します。
Azure SDK を使用するとこの機能が自動で有効になります。リモート デバッグ用ポートの手動による管理は、Web サイトの構成情報から可能です。詳細な手順については、後述のチュートリアルを参照してください。
サイトへの初回接続時に接続パスのセットアップが行われます。Web サイトへのアクセスがしばらく途絶えているか、またはサイトがダウンしている場合は、サイトが起動されます。このため初回接続には数秒かかります。Visual Studio が最初に接続したインスタンスに、その後も接続します。
サーバー側: Visual Studio のバージョン
Visual Studio は同梱の MSVSMON というアプリケーションの力を借りてリモート デバッグを行います。この MSVSMON は Azure のサーバー側で実行されます。サーバー側の MSVSMON のバージョンはクライアント側の Visual Studio のバージョンと一致していなければなりません。使用されているバージョンをサーバーが検知できるようになるよう取り組んでいますが、現時点では、接続する Visual Studio のバージョンをサーバーに知らせる必要があります。この手順も Azure SDK によって自動的に行われます。Azure SDK が、使用している Visual Studio のバージョンを検知し、リモート デバッグ機能を有効にすると同時に、Visual Studio のバージョンをサーバーに通知します。
サーバー側で必要なのは、リモート デバッガー機能を有効にすること、Visual Studio のバージョンを指定することの 2 つです。Azure SDK および Visual Studio 2013 を使用するとこれらの処理がすべて自動的に行われます。
クライアント側: Visual Studio
クライアント側では、Visual Studio デバッガーがデバッグ シンボル (英語) を使用します。デバッグ シンボルはコンパイル時に作成され、同時に作成されたライブラリや実行可能ファイルとひも付けられます。共同開発環境におけるシンボル管理の詳細については、こちらを参照してください。
Visual Studio では、デバッグ ビルドのコンパイルを選択すると、既定でデバッグ シンボル (pdb) が生成されます。既定の「リリース」および「デバッグ」(機械翻訳) というビルド構成は、このデバッグ シンボルとその他のコンパイラ構成および最適化を 1 つにまとめたものです。pdb ファイルを生成する「リリース」ビルドを作成することも可能です (その方法については、こちら (機械翻訳) を参照してください)。パフォーマンスの点を除いて、デバッグ バイナリを pdb ファイルで発行してはいけない理由はありません。
デバッグ シンボル (pdb)
Azure Web Sites では、Visual Studio が使用するシンボル (pdb) ファイルをローカル マシンまたはサーバーに置くことができます。サーバー側のシンボルを利用できる特別なバージョンの MSVSMON があり、pdb ファイルとバイナリを一緒に発行すると、MSVSMON がそれを検知して使用します。また別の方法として、通常どおり pdb ファイルをローカルで管理することもできます。
GIT を使用してデプロイする場合は、pdb ファイルをサーバー側に置く必要があります。デバッグ構成のコンパイル方法と詳しい解説については、本シリーズ記事のパート 3 をご覧ください。
Visual Studio のリモート デバッガーで可能なことは Azure Websites でも可能です。
このデバッガーは既存のいかなるプロセスにもアタッチできます。今回は Web サイトと .NET プロセスを中心に見てきましたが、Visual Studio デバッガーを利用できる場面は他にもたくさんあります。学習のご参考にまずはこちらをご覧ください。何か新たな発見があればぜひ共有してください。
Visual Studio ではブレークポイントが有効になっていると、グラフィックで表示されます。下の画像では、接続状態が正常で、シンボルが読み込まれ、クラウドをコントロールする準備が整っていることがわかります。ブレークポイントを作成したら、ソリッド (中抜きでない状態) で表示されていることを確認してください。
ここでは、リモート デバッグのしくみに対する理解がより深まったのではないでしょうか。次はその知識をさらに高度なシナリオで活用していきます。次回の記事では、マルチインスタンス環境と GIT デプロイメントのデバッグについて取り上げます。
このシリーズ記事のパート 1 は、こちらからお読みいただけます。