Visual Studio でのスナップショットデバッグに関するトラブルシューティングと既知の問題
適用対象: Visual Studio
この記事では、Visual Studio でスナップショット デバッガーを使用して Azure アプリをデバッグ するときに発生する可能性がある一般的な問題の解決策について説明します。
この記事で説明されている手順で問題が解決しない場合は、visual Studio で [ヘルプ>フィードバック>の報告] を選択して、Developer Communityの問題を検索するか、新しい問題を報告します。
問題: "スナップショット デバッガーのアタッチ" で HTTP 状態コード エラーが発生する
アタッチの試行中に [出力 ] ウィンドウに次のエラーが表示される場合は、次のセクションに記載されている既知の問題である可能性があります。 提案された解決策を試し、問題が解決しない場合は、前のエイリアスにお問い合わせください。
[TIMESTAMP] Error --- Unable to Start Snapshot Debugger - Attach Snapshot Debugger failed: System.Net.WebException: The remote server returned an error: (###) XXXXXX
(401) 未承認
このエラーは、Visual Studio から Azure への REST 呼び出しで無効な資格情報が使用されていることを示します。
次の手順を実行します。
- Visual Studio の個人用設定アカウントに、アタッチする Azure サブスクリプションとリソースに対するアクセス許可があることを確認します。 これを判断する簡単な方法は、デバッグ>アタッチ スナップショット デバッガーのダイアログ ボックスでリソースを使用できるかどうかをチェックすることです。>Azure リソース>[既存] または [クラウド エクスプローラー] を選択します。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
App Serviceで認証/承認 (EasyAuth) を有効にしている場合は、呼び出し履歴のエラー メッセージで LaunchAgentAsync で 401 エラーが発生する可能性があります。 要求が認証されていない場合に実行するアクションが、Azure portalで [匿名要求を許可する (アクションなし)] に設定されていることを確認し、代わりに D:\Home\sites\wwwroot に次のコンテンツを含むauthorization.jsonを提供します。
{
"routes": [
{
"path_prefix": "/",
"policies": {
"unauthenticated_action": "RedirectToLoginPage"
}
},
{
"http_methods": [ "POST" ],
"path_prefix": "/41C07CED-2E08-4609-9D9F-882468261608/api/agent",
"policies": {
"unauthenticated_action": "AllowAnonymous"
}
}
]
}
最初のルートは、[ IdentityProvider] を使用したログインに似たアプリ ドメインを効果的にセキュリティで保護します。 2 番目のルートは、認証の外部で SnapshotDebugger AgentLaunch エンドポイントを公開します。これは、SnapshotDebugger のプレインストールされたサイト拡張機能がアプリ サービスに対して有効になっている 場合にのみ 、SnapshotDebugger 診断エージェントを開始する定義済みのアクションを実行します。 authorization.json構成の詳細については、「URL 承認規則」を参照してください。
(403) 禁止
403 - 禁止エラーは、アクセス許可が拒否されたことを示します。 さまざまなシナリオでこのエラーが発生する可能性があります。
次の手順を実行します。
- Visual Studio アカウントに、リソースに必要な Role-Based Access Control (RBAC) アクセス許可を持つ有効な Azure サブスクリプションがあることを確認します。 AppService の場合は、アプリをホストしているApp Service プランに対してクエリを実行するアクセス許可があるかどうかをチェックします。
- クライアント マシンのタイムスタンプが正しく、最新であることを確認します。 通常、要求タイムスタンプの 15 分を超えるタイムスタンプがオフになっているサーバーでは、このエラーが発生します。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
(404) 見つかりません
404 - 見つからないエラーは、Web サイトがサーバーで見つからなかったことを示します。
次の手順を実行します。
- アタッチするApp Service リソースで Web サイトがデプロイされ、実行されていることを確認します。
- サイトが https://< resource.azurewebsites.net> で使用可能であることを確認します
- 適切に実行されているカスタム Web アプリケーションが、https://< resource.azurewebsites.net> でアクセスしたときに状態コード 404 が返されていないことを確認します。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
(406) 受け入れ不可
406 - 許容不可エラーは、サーバーが要求の Accept ヘッダーで設定された型に応答できないことを示します。
次の手順を実行します。
- サイトが https://< resource.azurewebsites.net> で使用可能であることを確認します。
- サイトが新しいインスタンスに移行されていないことを確認します。 スナップショット デバッガーでは、このエラーを断続的に生成できる特定のインスタンスへの要求のルーティングに ARRAffinity という概念が使用されます。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
(409) 競合
409 - 競合エラーは、要求が現在のサーバーの状態と競合していることを示します。
これは、ユーザーが ApplicationInsights を有効にしている AppService に対してスナップショット デバッガーをアタッチしようとしたときに発生する既知の問題です。 ApplicationInsights では、Visual Studio とは異なる大文字と小文字で AppSettings が設定され、この問題が発生します。
Visual Studio 2019 でこれを解決しました。
次の手順を実行します。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
(500) 内部サーバー エラー
500 - 内部サーバー エラー エラーは、サイトがダウンしているか、サーバーが要求を処理できないことを示します。 スナップショット デバッガーは、実行中のアプリケーションでのみ機能します。 Application Insights Snapshot Debugger では、例外のスナップショットが提供され、ニーズに最適なツールになる場合があります。
(502) 無効なゲートウェイ
502 - 不正なゲートウェイ エラーは、サーバー側のネットワークの問題を示し、一時的な可能性があります。
次の手順を実行します。
- スナップショット デバッガーをもう一度アタッチする前に、数分待ってみてください。
- このエラーが解決しない場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。
問題: スナップポイントがオンになっていない
通常のスナップポイント アイコン ではなく、スナップポイントを含む警告アイコンが表示された場合、スナップポイントはオンになりません。
次の手順を実行します。
- 同じバージョンのソース コードを使用して、アプリをビルドしてデプロイしてください。
- デプロイに適したシンボルを読み込んでいる必要があります。
- これを行うには、スナップショット デバッグ中に [モジュール ] ウィンドウを表示し、[シンボル ファイル] 列に、デバッグ中のモジュール用に読み込まれた .pdb ファイルが表示されていることを確認します。
- スナップショット デバッガーは、デプロイにシンボルを自動的にダウンロードして使用しようとします。
問題: スナップショットを開くときにシンボルが読み込まれない
次のウィンドウが表示された場合、シンボルは読み込まれませんでした。
次の手順を実行します。
ページで [ シンボル設定の変更... ] を選択します。
[シンボルのデバッグ>] 設定で、シンボル キャッシュ ディレクトリを追加します。
シンボル パスが設定された後スナップショットデバッグを再起動します。
プロジェクトで使用できるシンボル (.pdb ファイル) は、App Service配置と一致している必要があります。 ほとんどのデプロイ (Visual Studio を使用したデプロイ、Azure Pipelines または Kudu を使用した CI/CD など) では、シンボル ファイルがApp Serviceに公開されます。 シンボル キャッシュ ディレクトリを設定すると、Visual Studio でこれらのシンボルを使用できます。
または、organizationがシンボル サーバーを使用している場合、または別のパスにシンボルをドロップする場合は、シンボル設定を使用して、デプロイに適したシンボルを読み込みます。
問題: クラウド エクスプローラーに [スナップショット デバッガーのアタッチ] オプションが表示されない
次の手順を実行します。
スナップショット デバッガー コンポーネントがインストールされていることを確認します。 Visual Studio インストーラーを開き、Azure ワークロードのスナップショット デバッガー コンポーネントをチェックします。
Visual Studio 2019 以降のバージョンの場合は、アプリがサポートされていることを確認します。
- Azure アプリ サービス - .NET Framework 4.6.1 以降で実行されているアプリケーションを ASP.NET します。
- Azure アプリ サービス - Windows 上の .NET Core 2.0 以降で実行されているアプリケーションを ASP.NET Coreします。
- Azure Virtual Machines (および仮想マシン スケール セット) - .NET Framework 4.6.1 以降で実行されているアプリケーションを ASP.NET します。
- Azure Virtual Machines (および仮想マシン スケール セット) - Windows 上の .NET Core 2.0 以降で実行されているアプリケーションを ASP.NET Coreします。
- Azure Kubernetes Services - debian 9 で .NET Core 2.2 以降で実行されているアプリケーションを ASP.NET Coreします。
- Azure Kubernetes Services - Alpine 3.8 で .NET Core 2.2 以降で実行されているアプリケーションを ASP.NET Coreします。
- Azure Kubernetes Services - Ubuntu 18.04 で .NET Core 2.2 以降で実行されているアプリケーションを ASP.NET Coreします。
問題: 診断ツールで調整されたスナップショットのみが表示される
次の手順を実行します。
- スナップショットはメモリをほとんど占有しませんが、コミット料金がかかります。 スナップショット デバッガーによって、サーバーのメモリ負荷が高い状態であることが検出された場合、スナップショットは取得されません。 スナップショット デバッガー セッションを停止してもう一度試すことで、既にキャプチャされたスナップショットを削除できます。
問題: 複数のバージョンの Visual Studio を使用したスナップショット デバッグでエラーが発生する (Visual Studio 2019 以降のバージョン)
Visual Studio 2019 では、Azure App Serviceのスナップショット デバッガー サイト拡張機能の新しいバージョンが必要です。 このバージョンは、Visual Studio 2017 で使用されている以前のバージョンのスナップショット デバッガー サイト拡張機能と互換性がありません。 Visual Studio 2019 のスナップショット デバッガーを、Visual Studio 2017 のスナップショット デバッガーによって以前にデバッグされたAzure App Serviceにアタッチしようとすると、次のエラーが発生します。
逆に、Visual Studio 2017 を使用して、以前に Visual Studio 2019 のスナップショット デバッガーによってデバッグされたAzure App Serviceにスナップショット デバッガーをアタッチすると、次のエラーが発生します。
これを修正するには、Azure portalで次のアプリ設定を削除し、スナップショット デバッガーをもう一度アタッチします。
INSTRUMENTATIONENGINE_EXTENSION_VERSION
SNAPSHOTDEBUGGER_EXTENSION_VERSION
問題: 間違った/古い Azure リソースまたはストレージ アカウントにアタッチしています
次の手順を実行します。
"Azure リソース" エントリと "ストレージ アカウント" エントリでは、リソース名がキーとして使用されるため、リソースを別のサブスクリプションに移行するなどのアクションが問題を引き起こす可能性があります。 一覧をクリアするには、次の手順に従います。
VS の開発者コマンド プロンプトでこれらのコマンドを実行します (管理者特権)。
vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
Web アプリに関連付けられている .suo ファイルを削除します。
問題: スナップショット デバッグに問題があり、さらにログ記録を有効にする必要がある
エージェント ログを有効にする
エージェントのログ記録を有効または無効にするには、Visual Studio を開き 、[ツール>オプション] [>スナップショット デバッガー>] [エージェント ログの有効化] の順に移動します。 [セッションの開始時に古いエージェント ログを削除する] も有効になっている場合、正常にアタッチされるたびに以前のエージェント ログが削除されます。
エージェント ログは、次の場所にあります。
- App Services:
- App Serviceの Kudu サイト (つまり、<yourappservice) に移動します>。scm.azurewebsites.net) を選択し、[デバッグ コンソール] に移動します。
- エージェント ログは、 D:\home\LogFiles\SiteExtensions\DiagnosticsAgentLogs\ というディレクトリに格納されます。
- VM/VMSS:
- VM にサインインすると、エージェント ログは次のように格納されます: C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics<Version>\SnapshotDebuggerAgent*.txt_
- Aks
- 次のディレクトリに移動します: /tmp/diag/AgentLogs/*
Profiler/Instrumentation ログを有効にする
インストルメンテーション ログは、次の場所にあります。
- App Services:
- エラー ログは、 D:\Home\LogFiles\eventlog.xmlに自動的に送信され、イベントは または "運用ブレークポイント" で
<Provider Name="Instrumentation Engine" />
マークされます
- エラー ログは、 D:\Home\LogFiles\eventlog.xmlに自動的に送信され、イベントは または "運用ブレークポイント" で
- VM/VMSS:
- VM にサインインし、イベント ビューアーを開きます。
- 次のビューを開きます: Windows ログ>アプリケーション。
- 運用ブレークポイントまたはインストルメンテーション エンジンを使用して、イベント ソースで現在のログをフィルター処理します。
- Aks
-
/tmp/diag/log.txt でのインストルメンテーション エンジンのログ記録 (DockerFile で設定
MicrosoftInstrumentationEngine_FileLogPath
) - /tmp/diag/shLog.txt での ProductionBreakpoint ログ記録
-
/tmp/diag/log.txt でのインストルメンテーション エンジンのログ記録 (DockerFile で設定
既知の問題
- 同じApp Serviceに対して複数の Visual Studio クライアントを使用したスナップショット デバッグは現在サポートされていません。
- Roslyn IL の最適化は、ASP.NET Core プロジェクトでは完全にはサポートされていません。 一部の ASP.NET Core プロジェクトでは、一部の変数を表示できない場合や、条件ステートメントで一部の変数を使用できない場合があります。
- または
$CALLER
などの$FUNCTION
特殊な変数は、ASP.NET Core プロジェクトの条件付きステートメントやログポイントでは評価できません。 - ローカル キャッシュが有効になっている App Services では、スナップショット のデバッグは機能しません。
- スナップショット デバッグ API Apps は現在サポートされていません。
サイト拡張機能のアップグレード
スナップショット デバッグと Application Insights は、サイト プロセスに読み込まれる ICorProfiler に依存し、アップグレード中にファイルロックの問題が発生します。 運用サイトにダウンタイムがないことを確認するには、このプロセスをお勧めします。
- App Service内にデプロイ スロットを作成し、サイトをスロットにデプロイします。
- Visual Studio のクラウド エクスプローラーまたはAzure portalから、スロットを運用環境と交換します。
- スロット サイトを停止します。 すべてのインスタンスからサイト w3wp.exe プロセスを強制終了するには数秒かかります。
- Kudu サイトまたは Azure portal (App Service ブレード>開発ツール>拡張機能の更新プログラム) からスロット サイト拡張機能を>アップグレードします。
- スロット サイトを起動します。 サイトにアクセスして、もう一度ウォームアップすることをお勧めします。
- スロットを運用環境と交換します。