Visual Studio で Azure Cloud Services (延長サポート) アービスをデバッグする
Visual Studio には、Azure Cloud Services (延長サポート) と仮想マシンのデバッグに役立つさまざまなオプションがあります。
前提条件
- Azure 開発ワークロードがインストールされ、個々のコンポーネントの .NET Framework プロジェクト テンプレートと項目テンプレートがインストールされている Visual Studio ([Visual Studio のダウンロード] (https://visualstudio.microsoft.com/downloads/?cid=learn-onpage-download-cta を参照)。 Visual Studio の変更に関するページを参照してください。
- Azure アカウント。 Azure アカウントがない場合は、Visual Studio サブスクライバー向けの Azure の特典を有効にするか、無料試用版にサインアップします。
ローカル コンピューターでクラウド サービスをデバッグする
Azure コンピューティング エミュレーターを使用してローカル コンピューターでクラウド サービスをデバッグすれば、時間とコストの節約になります。 サービスをデプロイする前にローカルでデバッグすると、コンピューティング時間の料金を支払うことなく、信頼性とパフォーマンスを改善できます。 ただし、一部には Azure でクラウド サービスを実行した場合にのみ発生するエラーもあります。 サービスを発行し、デバッガーをロール インスタンスにアタッチするときに、リモート デバッグを有効にすると、このようなエラーをデバッグできます。
エミュレーターは、Azure コンピューティング サービスをシミュレートし、ローカル環境で動作するので、クラウド サービスのテストとデバッグを行ってからデプロイすることができます。 エミュレーターでは、ロール インスタンスのライフサイクルが処理され、ローカル ストレージなどのシミュレートされるリソースにアクセスできます。 Visual Studio でサービスをデバッグまたは実行すると、エミュレーターがバックグラウンド アプリケーションとして自動的に起動され、サービスがエミュレーターにデプロイされます。 エミュレーターを使用すると、ローカル環境で実行されているサービスを表示できます。 完全バージョンまたは Express バージョンのエミュレーターを実行できます 「Emulator Express を使用したローカルでのクラウド サービス実行とデバッグ」を参照してください。
ローカル コンピューターでクラウド サービスをデバッグするには
メニュー バーで、[デバッグ]>[デバッグの開始] を選択して、Azure Cloud Services (延長サポート) プロジェクトを実行します。 または、F5 キーを押します。 コンピューティング エミュレーターが起動することを示すメッセージが表示されます。 エミュレーターが起動すると、システム トレイ アイコンでそのことを確認できます。
通知領域にある Azure アイコンのショートカット メニューを開いて [コンピューティング エミュレーターの UI を表示]を選択し、コンピューティング エミュレーターのユーザー インターフェイスを表示します。
UI の左側にあるウィンドウには、現在コンピューティング エミュレーターにデプロイされているサービスと各サービスが実行しているロール インスタンスが表示されます。 サービスまたはロールを選択すると、右ペインにライフサイクル情報、ログ情報、および診断情報を表示できます。 含まれているウィンドウの上部余白にフォーカスを置くと、ウィンドウが右ペイン全体に拡大します。
[デバッグ] メニューのコマンドを選択し、コードにブレークポイントを設定して、アプリケーションをステップ実行します。 デバッガーでのアプリケーションのステップ実行に合わせてウィンドウが更新され、アプリケーションの現在の状態が表示されます。 デバッグを停止すると、アプリケーションのデプロイは削除されます。 アプリケーションに Web ロールが含まれていて、スタートアップ アクション プロパティで Web ブラウザーを起動するように設定している場合は、Visual Studio によってブラウザーで Web アプリケーションが起動されます。 サービス構成でロールのインスタンス数を変更する場合は、ロールのこれらの新しいインスタンスをデバッグできるように、クラウド サービスを停止してからデバッグを再開する必要があります。
注意
サービスの実行またはデバッグを停止しても、ローカルのコンピューティング エミュレーターとストレージ エミュレーターは停止されません。 これらは、通知領域から明示的に停止する必要があります。
Azure でクラウド サービスをデバッグする
このセクションの手順を使用してクラウド サービスのリモート デバッグを有効にしても、パフォーマンスが低下したり、追加料金が発生したりすることはありません。 運用サービスでは、サービスを利用するクライアントに悪影響が生じる可能性があるため、リモート デバッグを使用しないでください。
クラウド サービスのリモート デバッグを有効にする (延長サポート)
既定の msvsmon ポートの ServiceDefinition.csdef にエンドポイントを追加します。 Visual Studio 2019 の場合は 4024 です。
<Endpoints> <InputEndpoint name="RemoteDebug" protocol="tcp" port="4024" localPort="4024" /> </Endpoints>
注意
Visual Studio の他のバージョンでは、異なるポートが割り当てられます (「リモート デバッガーのポートの割り当て」)。
Azure プロジェクトのショートカット メニューを開き、 [発行]を選択します。
[ステージング] 環境と [デバッグ] 構成を選択します。
これは、単なるガイドラインです。 運用環境でテスト環境を実行することもできます。 ただし、運用環境でリモート デバッグを有効にすると、ユーザーに悪影響が生じる可能性があります。 リリース構成も選択できますが、デバッグ構成の方がデバッグは簡単です。
Cloud Services (延長サポート) に関する記事で説明されている通常の手順に従います。ただし、[すべてのロールに対してリモート デスクトップを有効にする] チェックボックスをオンにします。
リモート デスクトップ ユーザーのユーザー名とパスワードを作成するように求められます。これらは後でその仮想マシンにサインインするために必要です。
次の画面に進み、設定を確認し、準備ができたら [発行] をクリックし、デプロイが完了するまで待ちます。
Azure portal にサインインし、デバッグするクラウド サービス (延長サポート) に移動します。
左側のウィンドウで [ロールとインスタンス] を選択し、リモートでデバッグする対象のロールを選択します。
右側の [ロール インスタンス] ポップアウトで [接続] をクリックし、[接続] ボタンを選択して、仮想マシンにサインインできるリモート デスクトップ ファイルをダウンロードします。 前の手順でリモート デスクトップを有効にしたときに作成した資格情報を使用してサインインします。
リモート Azure 仮想マシンで、「リモート デバッグ」の説明に従って Visual Studio 2019 をインストールします。
仮想マシンのデスクトップから、コマンド D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Remote Debugger\x64\msvsmon.exe を実行します。 必ず管理者として実行してください。
ファイアウォール経由のアクセスを許可するように求めるメッセージに同意します。 msvsmon.exe で接続のリッスンが開始されたことを示すメッセージが表示されます。
Azure portal で、リソース グループを開き、クラウド サービス (延長サポート) のパブリック IP アドレスを取得します。
Azure でデバッガーをクラウド サービスにアタッチする (延長サポート)
注意
可能な限り、[発行] プロセスで選択した [デバッグ] 構成でデバッグする必要がありますが、[リリース] 構成をデバッグする場合は、Visual Studio で Ctrl+Q キーを使用して "マイ コードのみ" を検索し、[ツール]>[オプション]>[デバッガー]>[全般] で [マイ コードのみを有効にする] をオフにします。 リリース ビルドは最適化されているため、"マイ コード" とは見なされません。
[デバッグ]>[プロセスにアタッチ] を選択します (または Ctrl+Alt+P キーを押します)。
接続の種類は [既定] のままにします。
IP アドレスとポートを使用して接続先を入力します (
{ipaddress}:4024
)。[アタッチ先] を [自動] に設定します。
リモート デスクトップ ユーザーと同じ資格情報を使用してサインインします。
[すべてのユーザーのプロセスを表示する] を選択します。 worker ロールをデバッグする場合は、WaWorkerHost.exe にアタッチします。Web ロールをデバッグする場合は、w3wp.exe プロセスにアタッチします。Web API ロールの場合は、WaIISHost.exe です。
ブレークポイント (行に移動し、F9 キーを押します) を設定し、サイトのパブリック URL にアクセスし、デバッグするシナリオを再現します。
クラウド サービスのリモート デバッグを有効にする (延長サポート)
既定の msvsmon ポートの ServiceDefinition.csdef にエンドポイントを追加します。 Visual Studio 2022 の場合は 4026 で、Visual Studio 2019 の場合は 4024 です。
<Endpoints> <InputEndpoint name="RemoteDebug" protocol="tcp" port="4026" localPort="4026" /> </Endpoints>
注意
Visual Studio の他のバージョンでは、異なるポートが割り当てられます (「リモート デバッガーのポートの割り当て」)。
.NET 4.8 を対象としている場合、Cloud Services (延長サポート) を発行するときに必ず ServiceConfiguration.Cloud.cscfg ファイルを開き、
ServiceConfiguration
要素のosFamily
属性の値を確認してください。 .NET 4.8 プロジェクトの場合は、osFamily="7"
を使用します。Azure プロジェクトのショートカット メニューを開き、 [発行]を選択します。
[ステージング] 環境と [デバッグ] 構成を選択します。
これは、単なるガイドラインです。 運用環境でテスト環境を実行することもできます。 ただし、運用環境でリモート デバッグを有効にすると、ユーザーに悪影響が生じる可能性があります。 リリース構成も選択できますが、デバッグ構成の方がデバッグは簡単です。
Cloud Services (延長サポート) に関する記事で説明されている通常の手順に従います。ただし、[すべてのロールに対してリモート デスクトップを有効にする] チェックボックスをオンにします。
リモート デスクトップ ユーザーのユーザー名とパスワードを作成するように求められます。これらは後でその仮想マシンにサインインするために必要です。
次の画面に進み、設定を確認し、準備ができたら [発行] をクリックし、デプロイが完了するまで待ちます。
Azure portal にサインインし、デバッグするクラウド サービス (延長サポート) に移動します。
左側のウィンドウで [ロールとインスタンス] を選択し、リモートでデバッグする対象のロールを選択します。
右側の [ロール インスタンス] ポップアウトで [接続] をクリックし、[接続] ボタンを選択して、仮想マシンにサインインできるリモート デスクトップ ファイルをダウンロードします。 前の手順でリモート デスクトップを有効にしたときに作成した資格情報を使用してサインインします。
リモート Azure 仮想マシンで、「リモート デバッグ」の説明に従って Visual Studio 2022 をインストールします。
仮想マシン上のデスクトップから、Visual Studio のインストール フォルダー
Common7\IDE\Remote Debugger\x64
でコマンド msvsmon.exe を実行します。 必ず管理者として実行してください。ファイアウォール経由のアクセスを許可するように求めるメッセージに同意します。 msvsmon.exe で接続のリッスンが開始されたことを示すメッセージが表示されます。
Azure portal で、リソース グループを開き、クラウド サービス (延長サポート) のパブリック IP アドレスを取得します。
Azure でデバッガーをクラウド サービスにアタッチする (延長サポート)
注意
可能な限り、[発行] プロセスで選択した [デバッグ] 構成でデバッグする必要がありますが、[リリース] 構成をデバッグする場合は、Visual Studio で Ctrl+Q キーを使用して "マイ コードのみ" を検索し、[ツール]>[オプション]>[デバッガー]>[全般] で [マイ コードのみを有効にする] をオフにします。 リリース ビルドは最適化されているため、"マイ コード" とは見なされません。
[デバッグ]>[プロセスにアタッチ] を選択します (または Ctrl+Alt+P キーを押します)。
接続の種類は [既定] のままにします。
IP アドレスとポートを使用して接続先を入力します (
{ipaddress}:4026
)。[アタッチ先] を [自動] に設定します。
リモート デスクトップ ユーザーと同じ資格情報を使用してサインインします。
[すべてのユーザーのプロセスを表示する] を選択します。 worker ロールをデバッグする場合は、WaWorkerHost.exe にアタッチします。Web ロールをデバッグする場合は、w3wp.exe プロセスにアタッチします。Web API ロールの場合は、WaIISHost.exe です。
ブレークポイント (行に移動し、F9 キーを押します) を設定し、サイトのパブリック URL にアクセスし、デバッグするシナリオを再現します。
Azure でのリモート デバッグの制限
リモート デバッグには次の制限があります。
リモート デバッグを有効にすると、インスタンス数が 25 を超えるロールではクラウド サービスを発行できません。
デバッガーで使用されるポートは、30400 ~ 30424、31400 ~ 31424、および 32400 ~ 32424 です。 これらのポートを使用しようとすると、サービスの発行はできず、次のいずれかのエラー メッセージが Azure のアクティビティ ログに出力されます。
- .csdef ファイルに対して .cscfg ファイルを検証しているときにエラーが発生しました。
ロール 'ロール' エンドポイント
Microsoft.WindowsAzure.PlugIns.RemoteDebugger.Connector
の予約されたポート範囲 '範囲' は、定義済みのポートまたは範囲と重複しています。 - 割り当てに失敗しました。 後で再試行するか、VM のサイズまたはロール インスタンスの数を減らすか、別のリージョンにデプロイしてください。
- .csdef ファイルに対して .cscfg ファイルを検証しているときにエラーが発生しました。
ロール 'ロール' エンドポイント
Azure App Service のデバッグ
Azure App Service で実行しているプログラムをデバッグするには、Visual Studio の [プロセスにアタッチ] ダイアログを使用できます。
Note
これは、Visual Studio 2022 17.1 以降の Azure App Service でのみ使用できます。
Windows Azure App Service をデバッグするには
[デバッグ] の下の [プロセスにアタッチ] を選択します。
[接続の種類] を [Microsoft Azure App Service] に変更してから、 [検索..] を選択します。
表示されるダイアログ ボックスで、 [サブスクリプション名] を選択します。
Note
Azure App Service を含むサブスクリプションへのアクセス権を持つ Microsoft アカウントにサインインしている必要があります。
[リソース グループ] または [リソースの種類] でビューをフィルター処理するか、名前で検索します。
次に、デバッグする App Service を選択し、 [OK] を選択します。
これにより、App Service に対するリモート デバッグが有効になり、アタッチできるプロセスの一覧が表示されます。
アタッチするプロセスを選択した後、 [アタッチ] を選択してデバッグを開始します。
Azure Virtual Machines をデバッグする
Azure Virtual Machines で実行されているプログラムをデバッグするには、Visual Studio のサーバー エクスプローラーを使用します。 Azure 仮想マシンでリモート デバッグを有効にすると、仮想マシンにリモート デバッグ拡張機能がインストールされます。 インストール後は、仮想マシンのプロセスにアタッチし、通常どおりデバッグすることができます。
Note
Azure Resource Manager スタックを通して作成した仮想マシンについては、Visual Studio 2019 のクラウド エクスプローラーを使用して、リモートでデバッグできます。 詳細については、 クラウド エクスプローラーを使用した Azure リソースの管理に関するページを参照してください。
Azure 仮想マシンをデバッグするには
サーバー エクスプローラーで、Virtual Machines ノードを展開し、デバッグする仮想マシンのノードを選択します。
コンテキスト メニューを開き、 [デバッグを有効にする]を選択します。 仮想マシンでデバッグを有効にすることを確認するメッセージが表示されたら、 [はい]を選択します。
仮想マシンにリモート デバッグ拡張機能がインストールされ、デバッグが有効になります。
リモート デバッグ拡張機能のインストールが完了したら、仮想マシンのコンテキスト メニューを開き、 [デバッガーのアタッチ...]
Azure は仮想マシンのプロセスの一覧を取得し、[プロセスにアタッチ] ダイアログ ボックスに表示します。
[プロセスにアタッチ] ダイアログ ボックスで、[選択] を選択し、デバッグするコードの種類のみが表示されるように結果リストを制限します。 32 ビットまたは 64 ビット マネージド コードとネイティブ コードのいずれかまたは両方をデバッグできます。
仮想マシンでデバッグするプロセスを選択し、 [アタッチ] を選択します。 たとえば、仮想マシンで Web アプリをデバッグする場合は、w3wp.exe プロセスを選択できます。 詳細については、「Visual Studio での 1 つ以上のプロセスのデバッグ」および Azure ロールのアーキテクチャに関するページを参照してください。
デバッグ用の Web プロジェクトと仮想マシンを作成する
Azure プロジェクトを発行する前に、デバッグとテストのシナリオをサポートし、テストおよびモニタリング プログラムをインストールできる環境でテストすることをお勧めします。 このようなテストの実行方法の 1 つは、仮想マシンでアプリケーションをリモート デバッグすることです。
Visual Studio ASP.NET プロジェクトでは、アプリケーションのテストに使用できる便利な仮想マシンを作成するオプションを用意しています。 仮想マシンには、一般的に必要なエンドポイント (PowerShell、リモート デスクトップ、WebDeploy など) が含まれています。
デバッグ用の Web プロジェクトと仮想マシンを作成するには
Visual Studio で、新しい ASP.NET Web アプリケーションを作成します。
[新しい ASP.NET プロジェクト] ダイアログの [Azure] セクションのドロップダウン リスト ボックスで、 [仮想マシン] を選択します。 [リモート リソースを作成する] チェックボックスはオンのままにします。 OK を選択して続行します。
[Azure での仮想マシンの作成] ダイアログ ボックスが表示されます。
Note
まだ Azure アカウントにサインインしていない場合は、サインインするように求められます。
仮想マシンのさまざまな設定を選択し、 [OK] を選択します。 詳細については、「 Virtual Machines 」を参照してください。
DNS 名として入力した名前は、仮想マシンの名前になります。
Azure によって仮想マシンが作成され、エンドポイント (リモート デスクトップや Web 配置など) のプロビジョニングと構成が行われます。
仮想マシンの構成が完了したら、サーバー エクスプローラーで仮想マシンのノードを選択します。
コンテキスト メニューを開き、 [デバッグを有効にする]を選択します。 仮想マシンでデバッグを有効にすることを確認するメッセージが表示されたら、 [はい]を選択します。
仮想マシンにリモート デバッグ拡張機能がインストールされ、デバッグが有効になります。
Visual Studio でワンクリック発行を使用して Web プロジェクトをデプロイする方法に関するページの説明に従って、プロジェクトを発行します。 ここでは、仮想マシンでデバッグするため、Web の発行ウィザードの [設定] ページで、構成として [デバッグ] を選択します。 このように設定することで、デバッグ中もコードのシンボルを使用できます。
プロジェクトがまだデプロイされていない場合は、[ファイルの発行オプション] で [発行先で追加ファイルを削除する] を選択します。
プロジェクトを発行したら、サーバー エクスプローラーで仮想マシンのコンテキスト メニューを開き、 [デバッガーのアタッチ...]
Azure は仮想マシンのプロセスの一覧を取得し、[プロセスにアタッチ] ダイアログ ボックスに表示します。
[プロセスにアタッチ] ダイアログ ボックスで、[選択] を選択し、デバッグするコードの種類のみが表示されるように結果リストを制限します。 32 ビットまたは 64 ビット マネージド コードとネイティブ コードのいずれかまたは両方をデバッグできます。
仮想マシンでデバッグするプロセスを選択し、 [アタッチ] を選択します。 たとえば、仮想マシンで Web アプリをデバッグする場合は、w3wp.exe プロセスを選択できます。 詳細については、「 Visual Studio での 1 つ以上のプロセスのデバッグ 」を参照してください。
関連するコンテンツ
Azure Diagnostics を使用して、ロール内で実行されているコードから詳細情報を Azure に記録します。 「 Azure Diagnostics を使用したログ データの収集」を参照してください。
リモート デバッグのその他のシナリオについては、「リモート デバッグ」をご覧ください。