Visual Studio에서 스냅샷 디버깅에 대한 알려진 문제 해결

적용 대상: Visual Studio

이 문서에서는 Visual Studio에서 스냅샷 디버거를 사용하여 Azure 앱을 디버그 할 때 발생할 수 있는 일반적인 문제를 해결합니다.

이 문서에 설명된 단계가 문제를 resolve 않는 경우 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 리소스>기존 항목을 선택하거나 클라우드 Explorer 선택합니다.
  • 이 오류가 계속 지속되면 이 문서의 시작 부분에 설명된 피드백 채널 중 하나를 사용합니다.

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]를 사용하여 로그인과 유사한 앱 도메인을 효과적으로 보호합니다. 두 번째 경로는 스냅샷디버거 에이전트Launch 엔드포인트를 인증 외부에 노출합니다. 이 엔드포인트는 스냅샷디버거 진단 에이전트를 시작하는 미리 정의된 작업을 수행합니다. 이 작업은 App Service에 대해 SnapshotDebugger 사전 설치된 사이트 확장을 사용하도록 설정한 경우에만 수행됩니다. authorization.json 구성에 대한 자세한 내용은 URL 권한 부여 규칙을 참조하세요.

(403) 금지됨

403 - 사용할 수 없음 오류는 권한이 거부되었음을 나타냅니다. 다양한 시나리오로 인해 이 오류가 발생할 수 있습니다.

다음 단계를 수행합니다.

  • Visual Studio 계정에 리소스에 필요한 RBAC(Role-Based Access Control) 권한이 있는 유효한 Azure 구독이 있는지 확인합니다. 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가 있는 경고 아이콘이 표시되면 스냅포인트가 켜지지 않습니다.

Snappoint가 켜지지 않음을 보여 주는 스크린샷

다음 단계를 수행합니다.

  • 동일한 버전의 소스 코드를 사용하여 앱을 빌드하고 배포해야 합니다.
  • 배포에 올바른 기호를 로드하고 있는지 확인합니다.
  • 이렇게 하려면 스냅샷 디버깅하는 동안 모듈 창을 보고 디버깅 중인 모듈에 대해 로드된 .pdb 파일이 기호 파일 열에 표시되는지 확인합니다.
    • 스냅샷 디버거는 배포에 대한 기호를 자동으로 다운로드하고 사용합니다.

문제: 스냅샷을 열 때 기호가 로드되지 않음

다음 창이 표시되면 기호가 로드되지 않았습니다.

기호가 로드되지 않음을 보여 주는 스크린샷

다음 단계를 수행합니다.

  • 페이지에서 기호 설정 변경... 을 선택합니다.

  • 디버깅 > 기호 설정에서 기호 캐시 디렉터리를 추가합니다.

  • 기호 경로가 설정된 후 스냅샷 디버깅을 다시 시작합니다.

    프로젝트에서 사용할 수 있는 기호 또는 .pdb 파일은 App Service 배포와 일치해야 합니다. 대부분의 배포(Visual Studio를 통한 배포, Azure Pipelines 또는 Kudu를 사용한 CI/CD 등)는 기호 파일을 App Service 함께 게시합니다. 기호 캐시 디렉터리를 설정하면 Visual Studio에서 이러한 기호를 사용할 수 있습니다.

    기호에 대한 설정을 보여 주는 스크린샷

  • 또는 organization 기호 서버를 사용하거나 다른 경로에 기호를 삭제하는 경우 기호 설정을 사용하여 배포에 올바른 기호를 로드합니다.

문제: 클라우드 Explorer "스냅샷 디버거 연결" 옵션이 표시되지 않습니다.

다음 단계를 수행합니다.

  • 스냅샷 디버거 구성 요소가 설치되어 있는지 확인합니다. Visual Studio 설치 관리자 열고 Azure 워크로드에서 스냅샷 디버거 구성 요소를 검사.

  • Visual Studio 2019 이상 버전의 경우 앱이 지원되는지 확인합니다.

    • Azure 앱 Services - .NET Framework 4.6.1 이상에서 실행되는 애플리케이션을 ASP.NET.
    • Azure 앱 Services - 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 2019의 스크린샷

반대로 Visual Studio 2017을 사용하여 이전에 Visual Studio 2019의 스냅샷 디버거에서 디버깅한 Azure App Service 스냅샷 디버거를 연결하는 경우 다음 오류가 발생합니다.

호환되지 않는 스냅샷 디버거 사이트 확장 Visual Studio 2017의 스크린샷

이 문제를 해결하려면 Azure Portal 다음 앱 설정을 삭제하고 스냅샷 디버거를 다시 연결합니다.

  • INSTRUMENTATIONENGINE_EXTENSION_VERSION
  • SNAPSHOTDEBUGGER_EXTENSION_VERSION

문제: 잘못된/이전 Azure 리소스 또는 스토리지 계정에 연결 중

다음 단계를 수행합니다.

"Azure 리소스" 및 "Storage 계정" 항목은 리소스 이름을 키로 사용하므로 리소스를 다른 구독으로 마이그레이션하는 등의 작업으로 인해 문제가 발생할 수 있습니다. 목록을 지우려면 다음 단계를 수행합니다.

  1. VS에 대한 개발자 명령 프롬프트에서 이러한 명령을 실행합니다(관리자 권한 사용).

    vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU
    vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
    
  2. 웹앱과 연결된 모든 .suo 파일을 삭제합니다.

문제: 스냅샷 디버깅에 문제가 있고 더 많은 로깅을 사용하도록 설정해야 합니다.

에이전트 로그 사용

에이전트 로깅을 사용하도록 설정하고 사용하지 않도록 설정하려면 Visual Studio를 열고 도구>옵션>스냅샷 디버거>에이전트 로깅 사용으로 이동합니다. 세션 시작 시 이전 에이전트 로그 삭제도 사용하도록 설정된 경우 성공한 각 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/*

프로파일러/계측 로그 사용

다음 위치에서 계측 로그를 찾을 수 있습니다.

  • App Services:
    • 오류 로깅은 D:\Home\LogFiles\eventlog.xml자동으로 전송되고 이벤트는 또는 "프로덕션 중단점"으로 <Provider Name="Instrumentation Engine" /> 표시됩니다.
  • VM/VMSS:
    • VM에 로그인하고 이벤트 뷰어 엽니다.
    • Windows 로그>애플리케이션 보기를 엽니다.
    • 프로덕션 중단점 또는 계측 엔진을 사용하여 이벤트 원본현재 로그를 필터링합니다.
  • 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 프로젝트의 경우 일부 변수를 보거나 조건문에서 일부 변수를 사용하지 못할 수 있습니다.
  • 또는 $CALLER와 같은 $FUNCTION 특수 변수는 ASP.NET Core 프로젝트에 대한 조건문 또는 로그포인트에서 평가할 수 없습니다.
  • 로컬 캐싱이 켜져 있는 App Services에서는 스냅샷 디버 이 작동하지 않습니다.
  • 스냅샷 디버깅 API Apps는 현재 지원되지 않습니다.

사이트 확장 업그레이드

스냅샷 디버깅 및 Application Insights는 사이트 프로세스에 로드되고 업그레이드 중에 파일 잠금 문제를 일으키는 ICorProfiler에 따라 달라집니다. 프로덕션 사이트에 가동 중지 시간이 없도록 하려면 이 프로세스를 사용하는 것이 좋습니다.

  • App Service 내에 배포 슬롯을 만들고 사이트를 슬롯에 배포합니다.
  • Visual Studio 또는 Azure Portal 클라우드 Explorer 프로덕션으로 슬롯을 교환합니다.
  • 슬롯 사이트를 중지합니다. 모든 인스턴스에서 사이트 w3wp.exe 프로세스를 종료하는 데 몇 초 정도 걸립니다.
  • Kudu 사이트 또는 Azure Portal(App Service 블레이드 개발 도구 > 확장 업데이트)에서 슬롯 > 사이트 확장을 업그레이드합니다>.
  • 슬롯 사이트를 시작합니다. 다시 따뜻하게 하기 위해 사이트를 방문하는 것이 좋습니다.
  • 슬롯을 프로덕션으로 교환합니다.

참조