共用方式為


Visual Studio 中快照集偵錯的疑難排解和已知問題

適用於: Visual Studio

本文提供您在 Visual Studio 中使用快照調試程式偵錯 Azure 應用程式可能會遇到的常見問題。

如果本文所述的步驟無法解決問題,請在Visual Studio中選擇 [說明>傳送意見>反應報告問題] 來搜尋 開發人員社群 問題,或回報新問題。

問題:「附加快照調試程式」遇到 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 入口網站 中的 [不允許動作],並改為在 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] 登入。 第二個路由會在驗證之外公開 SnapshotDebugger AgentLaunch 端點,只有在 App Service 啟用 SnapshotDebugger 預安裝的網站擴充功能時,才會執行啟動 SnapshotDebugger 診斷代理程式的預先定義動作。 如需authorization.json組態的詳細資訊,請參閱 URL 授權規則

(403) 禁止

403 - 禁止錯誤表示許可權遭到拒絕。 許多不同的案例可能會導致此錯誤。

執行以下步驟:

  • 確認您的 Visual Studio 帳戶具有有效的 Azure 訂用帳戶,其中包含資源所需的角色型 存取控制 (RBAC) 許可權。 針對 AppService,請檢查您是否有權 查詢 裝載應用程式的 App Service 方案。
  • 確認用戶端電腦的時間戳正確且最新。 要求時間戳超過15分鐘的伺服器通常會產生此錯誤。
  • 如果此錯誤持續發生,請使用本文開頭所述的其中一個意見反應通道。

(404) 找不到

404 - 找不到錯誤表示在伺服器上找不到網站。

執行以下步驟:

  • 確認您已在所連結的 App Service 資源上部署並執行網站。
  • 確認網站位於 https://< resource.azurewebsites.net>
  • 確認您在 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

如果您看到具有快照點而非一般貼齊點圖示的警告圖示 ,則不會開啟快照點。

顯示 Snappoint 未開啟的螢幕快照。

執行以下步驟:

  • 請務必使用相同的原始程式碼版本來建置和部署您的應用程式。
  • 請確定您正在載入部署的正確符號。
  • 若要這樣做,請在快照集偵錯時檢視 [模組 ] 視窗,並確認 [符號檔] 資料行會顯示 針對您要偵錯之模組載入的 .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 虛擬機器 (與虛擬機器擴展集) - 在 .NET Framework 4.6.1 或更新版本中執行的 ASP.NET 應用程式。
    • Azure 虛擬機器 (與虛擬機器擴展集) - 在 Windows 上的 .NET Core 2.0 或更新版本中執行的 ASP.NET 應用程式。
    • 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 服務 上較新版本的快照調試程式網站擴充功能。 此版本與 Visual Studio 2017 所使用的舊版快照調試程式網站延伸模組不相容。 如果您嘗試將 Visual Studio 2019 中的快照調試程式附加至先前由 Visual Studio 2017 中快照調試程序偵錯的 Azure App 服務,您將會收到下列錯誤:

不相容快照調試程式網站延伸模組Visual Studio 2019的螢幕快照。

相反地,如果您使用 Visual Studio 2017 將快照調試程式附加至先前由 Visual Studio 2019 中快照調試程序偵錯的 Azure App 服務,您將會收到下列錯誤:

不相容快照調試程式網站延伸模組Visual Studio 2017的螢幕快照。

若要修正此問題,請在 Azure 入口網站中刪除下列應用程式設定並再次附加快照偵錯工具:

  • 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 並流覽至 [工具>選項>] [快照調試程式>啟用代理程序記錄]。 請注意,如果 同時啟用在會話啟動 時刪除舊的代理程序記錄,則每個成功的 Visual Studio 附加都會刪除先前的代理程序記錄。

您可以在下列位置找到代理程式記錄:

  • 應用程式服務:
    • 流覽至 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/*

啟用分析工具/檢測記錄

您可以在下列位置找到偵測記錄:

  • 應用程式服務:
    • 錯誤記錄會自動傳送至 D:\Home\LogFiles\eventlog.xml,事件會標示為 <Provider Name="Instrumentation Engine" /> 或 「生產斷點」
  • VM/VMSS:
    • 登入您的 VM 並開啟事件檢視器。
    • 開啟下列檢視: Windows Logs>應用程式
    • 使用生產中斷點檢測引擎,依據事件來源篩選目前的記錄
  • AKS
    • 檢測引擎記錄在 /tmp/diag/log.txt (在 DockerFile 中設定 MicrosoftInstrumentationEngine_FileLogPath
    • 在 /tmp/diag/shLog.txt 進行 ProductionBreakpoint 記錄

已知問題

  • 目前不支持針對相同 App Service 使用多個 Visual Studio 用戶端進行快照集偵錯。
  • ASP.NET Core 專案中不支援 Roslyn IL 優化。 對於某些 ASP.NET Core 專案來說,您可能無法查看一些變數,或在條件陳述式中使用一些變數。
  • 在 ASP.NET Core 專案的條件語句或記錄點中,無法評估特殊變數,例如 $FUNCTION$CALLER
  • 快照集偵錯不適用於已 開啟本機快 取的App Services。
  • 目前不支援快照集偵錯 API 應用程式。

網站延伸模組升級

快照集偵錯和 Application Insights 相依於 ICorProfiler,系統會將 ICorProfiler 載入至網站處理序,並在升級期間造成檔案鎖定的問題。 建議您執行此程式,以確保您的生產網站沒有下線時間。

  • 在您的 App Service 內建立部署位置,並將網站部署至位置。
  • 從 Visual Studio 的 [Cloud Explorer] 或從 Azure 入口網站交換位置與生產環境。
  • 停止位置網站。 從所有實例終止月 臺w3wp.exe 進程需要幾秒鐘的時間。
  • 從 Kudu 網站或 Azure 入口網站 升級位置月臺擴充功能(App Service 刀鋒窗口>開發工具>延伸模組>更新)。
  • 啟動位置網站。 我們建議您造訪網站以再次使用它。
  • 交換位置與生產環境。

參考資料