次の方法で共有


Visual Studio でのスナップショットのデバッグに関するトラブルシューティングと既知の問題

適用対象: Visual Studio

この記事では、Visual Studio でスナップショット デバッガーを使用して Azure アプリを発生する可能性がある一般的な問題の解決策について説明します。

この記事で説明する手順で問題が解決しない場合は、 Developer Community で問題を検索するか Visual Studio で [ヘルプ>フィードバックの送信>問題の報告 を選択して新しい問題を報告します。

問題: "スナップショット デバッガーのアタッチ" で HTTP 状態コード エラーが発生する

アタッチの試行中に Output ウィンドウに次のエラーが表示される場合は、次のセクションに記載されている既知の問題である可能性があります。 提案された解決策を試してください。問題が解決しない場合は、前のエイリアスにお問い合わせください。

[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 Resource]>[既存のものを選択] のダイアログ ボックス、または Cloud Explorer で、リソースを使用できるかどうかを確認します。
  • このエラーが引き続き発生する場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。

App Service で認証/承認 (EasyAuth) を有効にした場合、呼び出し履歴エラーメッセージで LaunchAgentAsync の 401 エラーが発生することがあります。 要求が認証されない場合に実行するアクションを確認します Azure portal で匿名要求 (アクションなし) に設定し、代わりに次のコンテンツを含むD:\Home\sites\wwwrootauthorization.jsonを提供します。

{
  "routes": [
    {
      "path_prefix": "/",
      "policies": {
        "unauthenticated_action": "RedirectToLoginPage"
      }
    },
    {
      "http_methods": [ "POST" ],
      "path_prefix": "/41C07CED-2E08-4609-9D9F-882468261608/api/agent",
      "policies": {
        "unauthenticated_action": "AllowAnonymous"
      }
    }
  ]
}

最初の route は、[[ID プロバイダー] でのログイン]と同様にアプリドメインを効果的に保護します。 2 番目の route は、認証の外部で SnapshotDebugger AgentLaunch エンドポイントを公開し、SnapshotDebugger のプレインストールされたサイト拡張機能がアプリサービスに対して有効になっている場合にのみ、事前定義済みの SnapshotDebugger 診断エージェント開始アクションを実行します。 authorization.json構成の詳細については、「URL 承認規則を参照してください。

(403) 禁止されています

403 - 許可されていませんエラーは、アクセス許可が拒否されたことを示します。 多くの異なるシナリオで、このエラーが発生する可能性があります。

この手順に従います:

  • Visual Studio アカウントに、リソースに必要なロールベースのアクセス制御 (RBAC) アクセス許可を持つ有効な Azure サブスクリプションがあることを確認します。 AppService の場合は、アプリをホストする App Service プランのクエリを実行するアクセス許可があるかどうかを確認します。
  • クライアント マシンのタイムスタンプが正しく、最新であることを確認します。 通常、要求のタイムスタンプからのずれが 15 分を超えるタイムスタンプのサーバーでこのエラーが発生します。
  • このエラーが引き続き発生する場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。

(404) 見つかりません

404 - Not Found エラーは、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 スナップショット デバッガーには例外に対してスナップショットを作成する機能があり、ニーズに最適なツールとなる場合があります。

(502) 無効なゲートウェイ

502 - 無効なゲートウェイ エラーは、サーバー側のネットワークの問題を示し、一時的な可能性があります。

この手順に従います:

  • 数分待ってから、スナップショット デバッガーを再アタッチしてみてください。
  • このエラーが引き続き発生する場合は、この記事の冒頭で説明したフィードバック チャネルのいずれかを使用します。

問題: スナップポイントがオンになっていない

通常のスナップポイント アイコンではなく、スナップポイント 警告アイコンが表示された場合、スナップポイントはオンになりません。

Snappoint がオンになっていないことを示すスクリーンショット。

この手順に従います:

  • 同じバージョンのソース コードを使用して、アプリをビルドしてデプロイしてください。
  • デプロイに適したシンボルを読み込んでいる必要があります。
  • これを行うには、スナップショット デバッグ中に Modules ウィンドウを表示し、[シンボル ファイル] 列に、デバッグ中のモジュール用に読み込まれた .pdb ファイルが表示されていることを確認します。
    • スナップショット デバッガーは、配置用のシンボルを自動的にダウンロードして使用しようとします。

問題: スナップショットを開いたときにシンボルが読み込まれない

次のウィンドウが表示された場合、シンボルは読み込まれませんでした。

シンボルが読み込まれないことを示すスクリーンショット。

この手順に従います:

  • ページ [シンボル設定の変更]... を選択します。

  • [デバッグ] > [シンボル] 設定で、シンボルのキャッシュ ディレクトリを追加します。

  • シンボルのパスを設定したら、スナップショットのデバッグを再開します。

    プロジェクトで使用できるシンボル ( .pdb ファイル) は、App Service のデプロイと一致している必要があります。 ほとんどのデプロイ (Visual Studio を使用したデプロイ、Azure Pipelines または Kudu を使用した CI/CD など) は、シンボル ファイルを App Service に公開します。 シンボルのキャッシュ ディレクトリを設定すると、Visual Studio でそのシンボルを使用できるようになります。

    シンボルの設定を示すスクリーンショット。

  • また、組織がシンボル サーバーを使用している場合、または別のパスにあるシンボルをドロップする場合は、シンボル設定を使用して配置の正しいシンボルを読み込みます。

問題: Cloud Explorer に [スナップショット デバッガーのアタッチ] オプションが表示されない

この手順に従います:

  • スナップショット デバッガー コンポーネントがインストールされていることを確認します。 Visual Studio インストーラーを開き、Azure ワークロードのスナップショット デバッガー コンポーネントをオンにします。

  • Visual Studio 2019 以降のバージョンでは、アプリがサポートされていることを確認します。

    • Azure App Service - .NET Framework 4.6.1 以降で実行されている ASP.NET アプリケーション。
    • Azure App Service - 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 Service - Debian 9 上の .NET Core 2.2 以降で実行されている ASP.NET Core アプリケーション。
    • Azure Kubernetes Service - Alpine 3.8 上の .NET Core 2.2 以降で実行されている ASP.NET Core アプリケーション。
    • Azure Kubernetes Service - 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 2017 のスナップショット デバッガーによって以前にデバッグされたAzure アプリ サービスに Visual Studio 2019 のスナップショット デバッガーをアタッチしようとすると、次のエラーが表示されます。

互換性のないスナップショット デバッガー サイト拡張機能 Visual Studio 2019 のスクリーンショット。

逆に、Visual Studio 2017 を使用して、以前に Visual Studio 2019 のスナップショット デバッガーによってデバッグされたAzure アプリ サービスにスナップショット デバッガーをアタッチすると、次のエラーが発生します。

互換性のないスナップショット デバッガー サイト拡張機能 Visual Studio 2017 のスクリーンショット。

これを修正するには、Azure portal で次のアプリ設定を削除し、スナップショット デバッガーを再度アタッチします。

  • INSTRUMENTATIONENGINE_EXTENSION_VERSION
  • SNAPSHOTDEBUGGER_EXTENSION_VERSION

問題: 間違った/古い Azure リソースまたはストレージ アカウントにアタッチしています

この手順に従います:

"Azure リソース" エントリと "ストレージ アカウント" エントリでは、リソース名がキーとして使用されるため、リソースを別のサブスクリプションに移行するなどのアクションで問題が発生する可能性があります。 一覧をクリアするには、次の手順に従います。

  1. VS の開発者コマンド プロンプトで次のコマンドを実行します (管理者特権を使用)。

    vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU
    vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
    
  2. Web アプリに関連付けられている .suo ファイルをすべて削除します。

問題: スナップショット デバッグで問題が発生し、さらにログ記録を有効にする必要がある

エージェント ログを有効にする

エージェントのログ記録を有効または無効にするには、Visual Studio を開き、 Tools>Options>Snapshot Debugger>Enable agent logging に移動します。 セッション開始時に古いエージェント ログを削除するも有効になっている場合、Visual Studio のアタッチが成功するたびに、以前のエージェント ログが削除されます。

エージェント ログは、次の場所にあります。

  • App Services:
    • App Service の Kudu サイト (つまり、 <yourappservice>. に移動します。scm.azurewebsites.net) に移動し、 Debug コンソールに移動します。
    • エージェント ログは、 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" /> または "運用ブレークポイント" でマークされます
  • VM/VMSS:
    • VM にサインインし、イベント ビューアーを開きます。
    • [Windows ログ] > [アプリケーション] ビューを開きます。
    • [Production Breakpoints]\(運用ブレークポイント\) または [インストルメンテーション エンジン] を使用して、[イベント ソース][現在のログをフィルター] を実行します。
  • AKS
    • /tmp/diag/log.txt でのインストルメンテーション エンジンのログ記録 (DockerFile でMicrosoftInstrumentationEngine_FileLogPath設定)
    • /tmp/diag/shLog.txt での ProductionBreakpoint のログ記録

既知の問題

  • 同じ App Service に対する複数の Visual Studio クライアントでのスナップショット デバッグは、現在サポートされていません。
  • Roslyn IL の最適化は、ASP.NET Core プロジェクトでは完全にはサポートされていません。 一部の ASP.NET Core プロジェクトには、表示されない変数や、条件付きステートメントに使用できない変数があります。
  • $FUNCTION$CALLERなどの特殊な変数は、ASP.NET Core プロジェクトの条件付きステートメントやログポイントでは評価できません。
  • スナップショット のデバッグは、 ローカル キャッシュ が有効になっている App Services では機能しません。
  • スナップショット デバッグ API Apps は現在サポートされていません。

サイト拡張機能のアップグレード

スナップショットのデバッグと Application Insights は ICorProfiler に依存しています。ICorProfiler はサイト プロセスに読み込まれ、アップグレード中にファイル ロックの問題を引き起こします。 運用サイトにダウンタイムが発生しないようにするには、このプロセスをお勧めします。

  • App Service 内にデプロイ スロットを作成し、サイトをスロットにデプロイします。
  • Visual Studio の Cloud Explorer または Azure portal から、スロットを運用とスワップします。
  • スロット サイトを停止します。 すべてのインスタンスからサイト w3wp.exe プロセスを強制終了するには数秒かかります。
  • Kudu サイトまたは Azure portal からスロット サイト拡張機能をアップグレードします ([App Service] ブレード > [開発ツール] > [拡張機能] > [更新])。
  • スロット サイトを起動します。 もう一度ウォームアップするために、このサイトにアクセスすることをお勧めします。
  • スロットを運用とスワップします。

関連情報