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 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"
}
}
]
}
첫 번째 경로는 Log in with [IdentityProvider]([IdentityProvider]로 로그인)와 유사하게 앱 도메인을 효과적으로 보호합니다. 두 번째 경로는 SnapshotDebugger AgentLaunch 엔드포인트를 인증 외부에 노출하여 앱 서비스에 대해 SnapshotDebugger 사전 설치된 사이트 확장을 사용하도록 설정한 ‘경우에만’ SnapshotDebugger 진단 에이전트를 시작하는 미리 정의된 작업을 수행합니다. authorization.json 구성에 대한 자세한 내용은 URL 권한 부여 규칙을 참조하세요.
(403) 사용할 수 없음
403 - 사용할 수 없음 오류는 사용 권한이 거부되었음을 나타냅니다. 다양한 시나리오로 인해 이 오류가 발생할 수 있습니다.
다음 단계를 수행합니다.
- Visual Studio 계정에 리소스에 대해 필요한 RBAC(역할 기반 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는 AppSettings를 Visual Studio와 다른 대/소문자로 설정하여 이 문제가 발생합니다.
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에서 해당 기호를 사용할 수 있습니다.
조직이 기호 서버를 사용하거나 다른 경로에 기호를 드롭하는 경우 기호 설정을 사용하여 배포에 맞게 올바른 기호를 로드하세요.
문제: 클라우드 탐색기에서 "스냅샷 디버거 연결" 옵션이 표시되지 않습니다.
다음 단계를 수행합니다.
스냅샷 디버거 구성 요소가 설치되어 있는지 확인합니다. Visual Studio 설치 관리자를 열고 Azure 워크로드에서 스냅샷 디버거 구성 요소를 확인합니다.
Visual Studio 2019 이상 버전의 경우 앱이 지원되는지 확인합니다.
- Azure App Services - .NET Framework 4.6.1 이상에서 실행되는 ASP.NET 애플리케이션
- Azure App 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 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 2019의 스냅샷 디버거를 Visual Studio 2017의 스냅샷 디버거에서 이전에 디버깅한 Azure 앱 서비스에 연결하려고 하면 다음 오류가 발생합니다.
반대로 Visual Studio 2017을 사용하여 이전에 Visual Studio 2019의 스냅샷 디버거에서 디버깅한 Azure 앱 서비스에 스냅샷 디버거를 연결하는 경우 다음 오류가 발생합니다.
이 문제를 해결하려면 Azure Portal에서 다음 앱 설정을 삭제하고 스냅샷 디버거를 다시 연결하세요.
INSTRUMENTATIONENGINE_EXTENSION_VERSION
SNAPSHOTDEBUGGER_EXTENSION_VERSION
문제: 잘못된/이전 Azure 리소스 또는 스토리지 계정에 연결하고 있습니다.
다음 단계를 수행합니다.
"Azure 리소스" 및 "스토리지 계정" 항목은 리소스 이름을 키로 사용하므로 리소스를 다른 구독으로 마이그레이션하는 등의 작업으로 인해 문제가 발생할 수 있습니다. 목록을 지우려면 다음 단계를 수행합니다.
VS(관리자 권한 포함)에 대한 개발자 명령 프롬프트에서 이러한 명령을 실행합니다.
vsregedit remove local HKCU SnapshotDebugger AzureResourcesMRU vsregedit remove local HKCU SnapshotDebugger StorageAccountsMRU
웹앱과 연결된 모든 .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" />
표시됩니다.
- 오류 로깅은 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 프로젝트의 경우 일부 변수를 볼 수 없거나 조건문에 사용할 수 없습니다.
- ASP.NET Core 프로젝트의 조건문이나 로그포인트에서 특수 변수(예:
$FUNCTION
또는$CALLER
)를 평가할 수 없습니다. - 로컬 캐싱이 켜져 있는 App Services에서는 스냅샷 디버깅 이 작동하지 않습니다.
- 스냅샷 디버깅 API Apps는 현재 지원되지 않습니다.
사이트 확장 업그레이드
스냅샷 디버깅 및 Application Insights에 영향을 미치는 ICorProfiler는 업그레이드하는 동안 사이트 프로세스에 로드되어 파일 잠금 문제를 일으킵니다. 프로덕션 사이트에 가동 중지 시간이 없도록 하려면 이 프로세스를 사용하는 것이 좋습니다.
- App Service 내에 배포 슬롯을 만들고 이 슬롯에 사이트를 배포합니다.
- 이 슬롯을 Visual Studio에 있는 클라우드 탐색기 또는 Azure Portal의 프로덕션과 교환합니다.
- 슬롯 사이트를 중지합니다. 모든 인스턴스에서 사이트 w3wp.exe 프로세스를 종료하는 데 몇 초 정도 걸립니다.
- Kudu 사이트 또는 Azure Portal에서 슬롯 사이트 확장을 업그레이드합니다>(App Service 블레이드 > 개발 도구 > 확장 업데이트).
- 슬롯 사이트를 시작합니다. 사이트를 방문하여 다시 사이트를 준비하는 것이 좋습니다.
- 슬롯을 프로덕션과 교환합니다.