共用方式為


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

適用於: Visualstudio

本文提供在 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 端點,這會執行預先定義的動作, 只在 已為您的應用程式服務啟用 SnapshotDebugger 預安裝網站延伸模組時啟動 SnapshotDebugger 診斷代理程式。 如需 authorization.json 組態的詳細資訊,請參閱 URL 授權規則

(403) 禁止

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

採取下列步驟:

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

(404) 找不到

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

採取下列步驟:

  • 確認您已在要附加的 App Service 資源上部署並執行網站。
  • 確認網站可在 https://< resource.azurewebsites.net>
  • 確認在 https:// resource.azurewebsites.net> 存取時,正確執行的自定義 Web 應用程式不會傳回狀態<代碼 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 - 不正確的閘道錯誤表示伺服器端網路問題,而且可能是暫時性的。

採取下列步驟:

  • 請先嘗試等候幾分鐘,再再次附加快照調試程式。
  • 如果此錯誤持續發生,請使用本文開頭所述的其中一個意見反應通道。

問題:快照點未開啟

如果您在快照點上看到警告圖示 ,而不是一般貼齊點圖示,則不會開啟貼齊點。

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

採取下列步驟:

  • 請確定您使用相同版本的原始碼來建置和部署您的應用程式。
  • 請確定您正在載入正確的部署符號。
  • 若要這樣做,請在快照集偵錯時檢視 [ 模組 ] 視窗,並確認 [符號檔案] 資料行顯示已針對您要偵錯的模組載入 的 .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 服務 - ASP.NET 在 .NET Framework 4.6.1 或更新版本上執行的應用程式。
    • Azure App 服務 - ASP.NET Core 在 Windows 上的 .NET Core 2.0 或更新版本上執行的應用程式。
    • Azure 虛擬機器 (和虛擬機擴展集) - ASP.NET 在 .NET Framework 4.6.1 或更新版本上執行的應用程式。
    • Azure 虛擬機器 (和虛擬機擴展集) - ASP.NET Core 在 Windows 上的 .NET Core 2.0 或更新版本上執行的應用程式。
    • Azure Kubernetes Services - ASP.NET Core 在 Debian 9 上的 .NET Core 2.2 或更新版本上執行的應用程式。
    • Azure Kubernetes Services - ASP.NET Core 在 Alpine 3.8 上的 .NET Core 2.2 或更新版本上執行的應用程式。
    • Azure Kubernetes Services - ASP.NET Core 在 .NET Core 2.2 或更新版本上於 Ubuntu 18.04 上執行的應用程式。

問題:我只會在診斷工具中看到節流快照集

顯示節流快照點的螢幕快照。

採取下列步驟:

  • 快照集佔用較少的記憶體,但確實需要認可費用。 如果快照調試程式偵測到您的伺服器記憶體負載過重,則不會擷取快照集。 您可以停止快照調試程式會話,然後再試一次,以刪除已擷取的快照集。

問題:使用多個 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 記錄應用程式>
    • 使用生產斷點檢測引擎,依事件來源篩選目前的記錄
  • AKS
    • 在 DockerFile 中設定MicrosoftInstrumentationEngine_FileLogPath/tmp/diag/log.txt (檢測引擎記錄)
    • ProductionBreakpoint 記錄位於 /tmp/diag/shLog.txt

已知問題

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

月臺擴充功能升級

快照集偵錯和 Application Insights 相依於 ICorProfiler,此 ICorProfiler 會載入網站程式,並在升級期間造成檔案鎖定問題。 建議您進行此程式,以確保您的生產網站沒有停機時間。

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

參考資料