.NET 앱의 예외에 대한 디버그 스냅샷Debug snapshots on exceptions in .NET apps

예외가 발생할 때 라이브 웹 애플리케이션에서 자동으로 디버그 스냅샷을 수집할 수 있습니다.When an exception occurs, you can automatically collect a debug snapshot from your live web application. 스냅샷은 예외가 throw되었을 때의 소스 코드 및 변수의 상태를 보여 줍니다.The snapshot shows the state of source code and variables at the moment the exception was thrown. Azure 애플리케이션 Insights 의 스냅숏 디버거는 웹 앱에서 예외 원격 분석을 모니터링 합니다.The Snapshot Debugger in Azure Application Insights monitors exception telemetry from your web app. 프로덕션에서 문제를 진단하는 데 필요한 정보를 유지하도록 많이 throw되는 예외에 대한 스냅샷을 수집합니다.It collects snapshots on your top-throwing exceptions so that you have the information you need to diagnose issues in production. 응용 프로그램에 스냅숏 수집기 NuGet 패키지 를 포함 하 고 필요에 따라 ApplicationInsights.config에서 컬렉션 매개 변수를 구성 합니다. 스냅숏은 Application Insights 포털의 예외 에 표시 됩니다.Include the Snapshot collector NuGet package in your application, and optionally configure collection parameters in ApplicationInsights.config. Snapshots appear on exceptions in the Application Insights portal.

포털에서 디버그 스냅샷을 확인하여 호출 스택을 보고 각 호출 스택 프레임에서 변수를 검사할 수 있습니다.You can view debug snapshots in the portal to see the call stack and inspect variables at each call stack frame. 소스 코드를 사용 하 여 보다 강력한 디버깅 환경을 얻으려면 Visual Studio 2019 Enterprise에서 스냅숏을 엽니다.To get a more powerful debugging experience with source code, open snapshots with Visual Studio 2019 Enterprise. 또한 Visual Studio에서 예외를 기다리지 않고 snappoint에서 대화형으로 스냅샷을 만들도록 설정할 수도 있습니다.In Visual Studio, you can also set Snappoints to interactively take snapshots without waiting for an exception.

디버그 스냅숏은 15 일 동안 저장 됩니다.Debug snapshots are stored for 15 days. 이 보존 정책은 애플리케이션 단위로 설정됩니다.This retention policy is set on a per-application basis. 이 값을 늘려야 하는 경우 Azure Portal에서 지원 사례를 열어 증가를 요청할 수 있습니다.If you need to increase this value, you can request an increase by opening a support case in the Azure portal.

응용 프로그램에 대 한 Application Insights 스냅숏 디버거 사용Enable Application Insights Snapshot Debugger for your application

스냅샷 컬렉션을 다음에 사용할 수 있습니다.Snapshot collection is available for:

  • .NET Framework 및 .NET Framework 4.5 이상을 실행하는 ASP.NET 애플리케이션.NET Framework and ASP.NET applications running .NET Framework 4.5 or later.
  • .NET Core 2.0 및 Windows에서 실행되는 ASP.NET Core 2.0 애플리케이션.NET Core 2.0 and ASP.NET Core 2.0 applications running on Windows.

다음 환경이 지원됩니다.The following environments are supported:

참고

클라이언트 애플리케이션(예를 들어, WPF, Windows Forms 또는 UWP)은 지원되지 않습니다.Client applications (for example, WPF, Windows Forms or UWP) are not supported.

스냅숏 디버거 사용 하도록 설정 했지만 스냅숏이 표시 되지 않는 경우 문제 해결 가이드를 확인 하세요.If you've enabled Snapshot Debugger but aren't seeing snapshots, check our Troubleshooting guide.

권한 부여Grant permissions

스냅숏에 대 한 액세스는 azure 역할 기반 액세스 제어 (Azure RBAC)로 보호 됩니다.Access to snapshots is protected by Azure role-based access control (Azure RBAC). 스냅샷을 검사하려면 먼저 구독 소유자가 사용자를 필요한 역할에 추가해야 합니다.To inspect a snapshot, you must first be added to the necessary role by a subscription owner.

참고

소유자 및 참가자는 이 역할을 자동으로 소유하지는 않습니다.Owners and contributors do not automatically have this role. 스냅샷을 보려면 해당 스냅샷을 역할에 추가해야 합니다.If they want to view snapshots, they must add themselves to the role.

구독 소유자는 스냅샷을 검사할 사용자에게 Application Insights Snapshot Debugger 역할을 할당해야 합니다.Subscription owners should assign the Application Insights Snapshot Debugger role to users who will inspect snapshots. 대상 Application Insights 리소스 또는 리소스 그룹이나 구독에 대한 구독 소유자가 개별 사용자 또는 그룹에 이 역할을 할당할 수 있습니다.This role can be assigned to individual users or groups by subscription owners for the target Application Insights resource or its resource group or subscription.

  1. Azure Portal에서 Application Insights 리소스로 이동합니다.Navigate to the Application Insights resource in the Azure portal.
  2. 액세스 제어(IAM) 를 클릭합니다.Click Access control (IAM).
  3. +역할 할당 추가 단추를 클릭합니다.Click the +Add role assignment button.
  4. 역할 드롭다운 목록에서 Application Insights 스냅샷 디버거 를 선택합니다.Select Application Insights Snapshot Debugger from the Roles drop-down list.
  5. 추가할 사용자의 이름을 검색하고 입력합니다.Search for and enter a name for the user to add.
  6. 저장 단추를 클릭하여 역할에 사용자를 추가합니다.Click the Save button to add the user to the role.

중요

스냅샷은 변수 및 매개 변수 값의 개인 정보 및 기타 중요한 정보를 포함할 수 있습니다.Snapshots can potentially contain personal and other sensitive information in variable and parameter values.

포털에서 스냅숏 보기View Snapshots in the Portal

응용 프로그램에서 예외가 발생 하 여 스냅숏이 생성 된 후에는 볼 스냅숏이 있어야 합니다.After an exception has occurred in your application and a snapshot has been created, you should have snapshots to view. 스냅숏에서 준비를 하 고 포털에서 볼 수 있는 경우 발생 하는 예외부터 5 ~ 10 분 정도 걸릴 수 있습니다.It can take 5 to 10 minutes from an exception occurring to a snapshot ready and viewable from the portal. 스냅숏을 보려면 실패 창에서 작업 탭을 볼 때 작업 단추를 선택 하거나 예외 탭을 볼 때 예외 단추를 선택 합니다.To view snapshots, in the Failure pane, select the Operations button when viewing the Operations tab, or select the Exceptions button when viewing the Exceptions tab:

오류 페이지

오른쪽 창에서 작업 또는 예외를 선택 하 여 종단 간 트랜잭션 세부 정보 창을 연 다음 예외 이벤트를 선택 합니다.Select an operation or exception in the right pane to open the End-to-End Transaction Details pane, then select the exception event. 지정 된 예외에 대해 스냅숏을 사용할 수 있는 경우 오른쪽 창에 예외에 대 한 세부 정보와 함께 디버그 스냅숏 열기 단추가 표시 됩니다.If a snapshot is available for the given exception, an Open Debug Snapshot button appears on the right pane with details for the exception.

예외에서 디버그 스냅샷 열기 단추

디버그 스냅샷 보기에는 호출 스택 및 변수 창이 표시됩니다.In the Debug Snapshot view, you see a call stack and a variables pane. 호출 스택 창에서 호출 스택의 프레임을 선택하면 변수 창에 해당 함수 호출에 대한 지역 변수 및 매개 변수가 표시됩니다.When you select frames of the call stack in the call stack pane, you can view local variables and parameters for that function call in the variables pane.

포털에서 디버그 스냅샷 보기

중요한 정보가 스냅샷에 포함될 수 있으며 기본적으로 표시되지 않습니다.Snapshots might include sensitive information, and by default they aren't viewable. 스냅샷을 보려면 Application Insights Snapshot Debugger 역할이 할당되어 있어야 합니다.To view snapshots, you must have the Application Insights Snapshot Debugger role assigned to you.

Visual Studio 2017 Enterprise 이상에서 스냅숏 보기View Snapshots in Visual Studio 2017 Enterprise or above

  1. 스냅숏 다운로드 단추를 클릭 하 .diagsession 여 Visual Studio Enterprise에서 열 수 있는 파일을 다운로드 합니다.Click the Download Snapshot button to download a .diagsession file, which can be opened by Visual Studio Enterprise.

  2. .diagsession이 파일을 열려면 스냅숏 디버거 Visual Studio 구성 요소가 설치 되어 있어야 합니다.To open the .diagsession file, you need to have the Snapshot Debugger Visual Studio component installed. 스냅숏 디버거 구성 요소는 Visual Studio에서 ASP.net 워크 로드의 필수 구성 요소 이며 Visual Studio 설치 관리자의 개별 구성 요소 목록에서 선택할 수 있습니다.The Snapshot Debugger component is a required component of the ASP.net workload in Visual Studio and can be selected from the Individual Component list in the Visual Studio installer. Visual Studio 2017 버전 15.5 이전 버전의 Visual Studio를 사용 하는 경우 Visual Studio Marketplace에서 확장을 설치 해야 합니다.If you are using a version of Visual Studio prior to Visual Studio 2017 version 15.5, you will need to install the extension from the Visual Studio Marketplace.

  3. 스냅샷 파일을 연 후에 Visual Studio에서 미니덤프 디버깅 페이지가 표시됩니다.After you open the snapshot file, the Minidump Debugging page in Visual Studio appears. 관리 코드 디버그 를 클릭하여 스냅샷을 디버깅하기 시작합니다.Click Debug Managed Code to start debugging the snapshot. 예외가 throw되는 코드 줄에 스냅샷이 열리고 프로세스의 현재 상태를 디버그할 수 있습니다.The snapshot opens to the line of code where the exception was thrown so that you can debug the current state of the process.

    Visual Studio에서 디버그 스냅샷 보기

다운로드한 스냅샷에는 웹 애플리케이션 서버에 있는 모든 기호 파일이 포함되어 있습니다.The downloaded snapshot includes any symbol files that were found on your web application server. 이러한 기호 파일은 소스 코드에 스냅샷 데이터를 연결하는 데 필요합니다.These symbol files are required to associate snapshot data with source code. App Service 앱의 경우 웹앱을 게시할 때 기호 배포를 사용할 수 있는지를 확인합니다.For App Service apps, make sure to enable symbol deployment when you publish your web apps.

스냅샷 작동 방식How snapshots work

스냅샷 수집기는 Application Insights 원격 분석 프로세서로 구현됩니다.The Snapshot Collector is implemented as an Application Insights Telemetry Processor. 애플리케이션이 실행되면 스냅샷 수집기 원격 분석 프로세서가 애플리케이션의 원격 분석 파이프라인에 추가됩니다.When your application runs, the Snapshot Collector Telemetry Processor is added to your application's telemetry pipeline. 애플리케이션에서 TrackException을 호출할 때마다 스냅샷 수집기는 throw된 예외의 형식과 throw하는 메서드에서 문제 ID를 계산합니다.Each time your application calls TrackException, the Snapshot Collector computes a Problem ID from the type of exception being thrown and the throwing method. 애플리케이션에서 TrackException을 호출할 때마다 해당 문제 ID에 대한 카운터가 증가합니다.Each time your application calls TrackException, a counter is incremented for the appropriate Problem ID. 카운터가 ThresholdForSnapshotting 값에 도달하면 문제 ID가 수집 계획에 추가됩니다.When the counter reaches the ThresholdForSnapshotting value, the Problem ID is added to a Collection Plan.

또한 Snapshot Collector는 AppDomain.CurrentDomain.FirstChanceException 이벤트에 가입하여 예외가 throw되었을 때 이를 모니터링합니다.The Snapshot Collector also monitors exceptions as they're thrown by subscribing to the AppDomain.CurrentDomain.FirstChanceException event. 해당 이벤트가 발생하면 예외의 문제 ID가 계산되어 수집 계획의 문제 ID와 비교됩니다.When that event fires, the Problem ID of the exception is computed and compared against the Problem IDs in the Collection Plan. 일치하는 항목이 있으면 실행 중인 프로세스의 스냅샷이 만들어집니다.If there's a match, then a snapshot of the running process is created. 스냅샷에는 고유 식별자가 할당되고, 예외는 해당 식별자로 스탬프 처리됩니다.The snapshot is assigned a unique identifier and the exception is stamped with that identifier. FirstChanceException 처리기가 반환되면 throw된 예외는 정상으로 처리됩니다.After the FirstChanceException handler returns, the thrown exception is processed as normal. 결국, 예외는 스냅샷 식별자와 함께 Application Insights에 보고되는 TrackException 메서드에 다시 도달합니다.Eventually, the exception reaches the TrackException method again where it, along with the snapshot identifier, is reported to Application Insights.

주 프로세스는 계속 실행되고 매우 짧은 중단을 통해 사용자에게 트래픽을 제공합니다.The main process continues to run and serve traffic to users with little interruption. 한편 스냅샷은 스냅샷 업로더 프로세스에 전달됩니다.Meanwhile, the snapshot is handed off to the Snapshot Uploader process. 스냅샷 업로더는 미니덤프를 만들고, 관련된 모든 기호(.pdb) 파일과 함께 이를 Application Insights에 업로드합니다.The Snapshot Uploader creates a minidump and uploads it to Application Insights along with any relevant symbol (.pdb) files.

  • 프로세스 스냅샷은 실행 중인 프로세스의 일시 중단된 복제본입니다.A process snapshot is a suspended clone of the running process.
  • 스냅샷을 만드는 데는 약 10~20 밀리초가 걸립니다.Creating the snapshot takes about 10 to 20 milliseconds.
  • ThresholdForSnapshotting의 기본값은 1이며,The default value for ThresholdForSnapshotting is 1. 최솟값이기도 합니다.This is also the minimum value. 따라서 스냅샷을 만들려면 먼저 앱에서 동일한 예외를 두 번 트리거해야 합니다.Therefore, your app has to trigger the same exception twice before a snapshot is created.
  • Visual Studio에서 디버그하는 동안 스냅샷을 생성하려면 IsEnabledInDeveloperMode를 true로 설정합니다.Set IsEnabledInDeveloperMode to true if you want to generate snapshots while debugging in Visual Studio.
  • 스냅샷을 만드는 속도는 SnapshotsPerTenMinutesLimit 설정으로 제한됩니다.The snapshot creation rate is limited by the SnapshotsPerTenMinutesLimit setting. 기본적으로 10분마다 하나의 스냅샷으로 제한됩니다.By default, the limit is one snapshot every ten minutes.
  • 매일 최대 50개의 스냅샷을 업로드할 수 있습니다.No more than 50 snapshots per day may be uploaded.

제한 사항Limitations

기본 데이터 보존 기간은 15 일입니다.The default data retention period is 15 days. 각 Application Insights 인스턴스에 대해 하루에 최대 50 개의 스냅숏이 허용 됩니다.For each Application Insights instance, a maximum number of 50 snapshots is allowed per day.

기호 게시Publish symbols

스냅샷 디버거를 사용하려면 Visual Studio에서 변수를 디코딩하고 디버깅 환경을 제공하기 위해 프로덕션 서버에 기호 파일이 있어야 합니다.The Snapshot Debugger requires symbol files on the production server to decode variables and to provide a debugging experience in Visual Studio. Visual Studio 2017의 15.2 버전 이상은 App Service에 게시할 때 기본적으로 릴리스 빌드에 대한 기호를 게시합니다.Version 15.2 (or above) of Visual Studio 2017 publishes symbols for release builds by default when it publishes to App Service. 이전 버전에서는 기호가 릴리스 모드에서 게시될 수 있게 게시 프로필 .pubxml 파일에 다음 줄을 추가해야 합니다.In prior versions, you need to add the following line to your publish profile .pubxml file so that symbols are published in release mode:

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

Azure Compute 및 기타 형식의 경우 기호 파일이 주 애플리케이션 .dll의 동일한 폴더(일반적으로 wwwroot/bin)에 있거나 현재 경로에서 사용할 수 있는지 확인합니다.For Azure Compute and other types, make sure that the symbol files are in the same folder of the main application .dll (typically, wwwroot/bin) or are available on the current path.

참고

사용할 수 있는 다른 기호 옵션에 대 한 자세한 내용은 Visual Studio 설명서를 참조 하세요.For more information on the different symbol options that are available consult the Visual Studio documentation. 최상의 결과를 위해서는 "Full", "이식 가능" 또는 "포함"을 사용 하는 것이 좋습니다.For best results, we recommend using “Full”, “Portable” or “Embedded”.

최적화된 빌드Optimized builds

경우에 따라 JIT 컴파일러에서 적용한 최적화로 인해 릴리스 빌드에서 지역 변수가 표시되지 않습니다.In some cases, local variables can't be viewed in release builds because of optimizations that are applied by the JIT compiler. 그러나 Azure App Services에서 스냅샷 수집기는 수집 계획에 속한 throw하는 메서드를 최적화 해제할 수 있습니다.However, in Azure App Services, the Snapshot Collector can deoptimize throwing methods that are part of its Collection Plan.

최적화 해제 지원을 받으려면 Application Insights 사이트 확장을 App Service에 설치합니다.Install the Application Insights Site Extension in your App Service to get deoptimization support.

다음 단계Next steps

응용 프로그램에 대 한 Application Insights 스냅숏 디버거를 사용 하도록 설정 합니다.Enable Application Insights Snapshot Debugger for your application:

Application Insights 스냅숏 디버거 이상:Beyond Application Insights Snapshot Debugger: