Momentopnamen voor foutopsporing over uitzonderingen in .NET-apps

Wanneer er een uitzondering optreedt, kunt u automatisch een momentopname van foutopsporing verzamelen uit uw live webtoepassing. De momentopname toont de status van de broncode en variabelen op het moment dat de uitzondering is gemaakt. De Snapshot Debugger in Azure-toepassing Insights bewaakt uitzonderings-telemetrie van uw web-app. Het verzamelt momentopnamen op uw belangrijkste uitzonderingen, zodat u de informatie hebt die u nodig hebt om problemen in productie vast te stellen. Neem het NuGet-pakket van de momentopnameverzamelaar op in uw toepassing en configureer optioneel verzamelingsparameters in ApplicationInsights.config. Momentopnamen worden weergegeven bij uitzonderingen in Application Insights portal.

U kunt foutopsporingsmomentopnamen in het portaal bekijken om de aanroepstack te zien en variabelen inspecteren bij elk aanroepstackframe. Open momentopnamen met Visual Studio 2019 Enterprise voor een krachtigere ervaring voor het Visual Studio van de broncode. In Visual Studio kunt u ook Modulepunten instellen om interactief momentopnamen te maken zonder te wachten op een uitzondering.

Momentopnamen voor foutopsporing worden 15 dagen opgeslagen. Dit retentiebeleid wordt per toepassing ingesteld. Als u deze waarde wilt verhogen, kunt u een verhoging aanvragen door een ondersteuningsaanvraag te openen in de Azure Portal.

Een Application Insights Snapshot Debugger voor uw toepassing inschakelen

Momentopnameverzameling is beschikbaar voor:

  • .NET Framework en ASP.NET toepassingen met .NET Framework 4.5 of hoger.
  • .NET Core en ASP.NET Core-toepassingen met .NET Core 2.1 (LTS) of 3.1 (LTS) in Windows.
  • .NET 5.0-toepassingen in Windows.

Het gebruik van .NET Core 2.0, 2.2 of 3.0 wordt niet aanbevolen omdat deze niet meer worden ondersteund.

De volgende omgevingen worden ondersteund:

Notitie

Clienttoepassingen (bijvoorbeeld WPF, Windows Forms of UWP) worden niet ondersteund.

Als u een Snapshot Debugger hebt ingeschakeld, maar geen momentopnamen ziet, raadpleegt u onze gids voor probleemoplossing.

Machtigingen verlenen

Toegang tot momentopnamen wordt beveiligd door op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC). Als u een momentopname wilt inspecteren, moet de eigenaar van het abonnement u eerst toevoegen aan de benodigde rol.

Notitie

Eigenaars en inzenders hebben deze rol niet automatisch. Als ze momentopnamen willen weergeven, moeten ze zichzelf toevoegen aan de rol.

Abonnementseigenaren moeten de rol Application Insights Snapshot Debugger toewijzen aan gebruikers die momentopnamen inspecteren. Deze rol kan worden toegewezen aan afzonderlijke gebruikers of groepen door abonnementseigenaren voor de doel-Application Insights resource of de resourcegroep of het abonnement.

  1. Navigeer naar Application Insights resource in de Azure Portal.
  2. Klik op Toegangsbeheer (IAM).
  3. Klik op de knop +Roltoewijzing toevoegen.
  4. Selecteer Application Insights Snapshot Debugger in de vervolgkeuzelijst Rollen.
  5. Zoek en voer een naam in voor de gebruiker die u wilt toevoegen.
  6. Klik op de knop Opslaan om de gebruiker toe te voegen aan de rol.

Belangrijk

Houd er rekening mee dat momentopnamen persoonlijke gegevens of andere gevoelige informatie in variabele- en parameterwaarden kunnen bevatten. Momentopnamegegevens worden opgeslagen in dezelfde regio als uw App Insights-resource.

Momentopnamen weergeven in de portal

Nadat er een uitzondering is opgetreden in uw toepassing en er een momentopname is gemaakt, moet u momentopnamen hebben die u kunt bekijken. Het kan 5 tot 10 minuten duren voordat een uitzondering optreedt en er een momentopname wordt gemaakt die gereed is en kan worden bekeken vanuit de portal. Als u momentopnamen wilt weergeven, selecteert u in het deelvenster Fout de knop Bewerkingen wanneer u het tabblad Bewerkingen bekijkt of selecteert u de knop Uitzonderingen wanneer u het tabblad Uitzonderingen bekijkt:

Pagina Fouten

Selecteer een bewerking of uitzondering in het rechterdeelvenster om het deelvenster End-to-End-transactiedetails te openen en selecteer vervolgens de uitzonderingsgebeurtenis. Als er een momentopname beschikbaar is voor de opgegeven uitzondering, wordt de knop Momentopname openen weergegeven in het rechterdeelvenster met details voor de uitzondering.

Knop Foutopsporing voor momentopname openen bij uitzondering

In de weergave Foutopsporing voor momentopnamen ziet u een aanroepstack en een deelvenster variabelen. Wanneer u frames van de aanroepstack selecteert in het aanroepstackdeelvenster, kunt u lokale variabelen en parameters voor die functie-aanroep weergeven in het deelvenster variabelen.

Foutopsporingsmomentopname weergeven in de portal

Momentopnamen bevatten mogelijk gevoelige informatie en zijn standaard niet te bekijken. Als u momentopnamen wilt weergeven, moet de rol Application Insights Snapshot Debugger aan u zijn toegewezen.

Momentopnamen weergeven in Visual Studio 2017 Enterprise of hoger

  1. Klik op de knop Momentopname downloaden om een .diagsession bestand te downloaden dat kan worden geopend door Visual Studio Enterprise.

  2. Als u het .diagsession bestand wilt openen, moet u het Snapshot Debugger Visual Studio geïnstalleerd. Het Snapshot Debugger-onderdeel is een vereist onderdeel van de ASP.net-workload in Visual Studio en kan worden geselecteerd in de lijst Afzonderlijke onderdelen in het Visual Studio-installatieprogramma. Als u een versie van Visual Studio vóór Visual Studio 2017 versie 15.5 gebruikt, moet u de extensie installeren vanuit Visual Studio Marketplace.

  3. Nadat u het momentopnamebestand hebt geopend, wordt de pagina Minidump-Visual Studio weergegeven. Klik op Fouten opsporen in beheerde code om te beginnen met het opsporen van fouten in de momentopname. De momentopname wordt geopend met de coderegel waar de uitzondering is opgeworpen, zodat u fouten kunt opsporen in de huidige status van het proces.

    Momentopname van foutopsporing weergeven in Visual Studio

De gedownloade momentopname bevat alle symboolbestanden die zijn gevonden op de webtoepassingsserver. Deze symboolbestanden zijn vereist om momentopnamegegevens te koppelen aan de broncode. Voor App Service-apps moet u symboolimplementatie inschakelen wanneer u uw web-apps publiceert.

Hoe momentopnamen werken

De Snapshot Collector wordt geïmplementeerd als een Application Insights Telemetry Processor. Wanneer uw toepassing wordt uitgevoerd, wordt Snapshot Collector Telemetrieprocessor toegevoegd aan de telemetriepijplijn van uw toepassing. Telkens wanneer uw toepassing TrackExceptionaanroept, berekent Snapshot Collector een probleem-id van het type uitzondering dat wordt veroorzaakt en de throwing-methode. Telkens wanneer uw toepassing TrackException aanroept, wordt er een teller voor de juiste probleem-id verhoogd. Wanneer de teller de waarde ThresholdForSnapshotting bereikt, wordt de probleem-id toegevoegd aan een verzamelingsplan.

De Snapshot Collector controleert ook uitzonderingen wanneer ze worden veroorzaakt door zich te abonneren op de gebeurtenis AppDomain.CurrentDomain.FirstChanceException. Wanneer deze gebeurtenis wordt veroorzaakt, wordt de probleem-id van de uitzondering berekend en vergeleken met de probleem-id's in het verzamelingsplan. Als er een overeenkomst is, wordt er een momentopname van het lopende proces gemaakt. Aan de momentopname wordt een unieke id toegewezen en de uitzondering wordt voorzien van een stempel met die id. Nadat de FirstChanceException-handler is retourneert, wordt de uitzondering verwerkt zoals normaal. Uiteindelijk bereikt de uitzondering de methode TrackException opnieuw, waarbij deze samen met de momentopname-id wordt gerapporteerd aan Application Insights.

Het hoofdproces blijft met weinig onderbrekingen worden uitgevoerd en verkeer naar gebruikers verwerken. Ondertussen wordt de momentopname aan het Snapshot Uploader-proces overgedragen. De Snapshot Uploader maakt een minidump en uploadt deze naar Application Insights, samen met alle relevante symboolbestanden (.pdb).

Tip

  • Een momentopname van het proces is een opgeschorte kloon van het lopende proces.
  • Het maken van de momentopname duurt ongeveer 10 tot 20 milliseconden.
  • De standaardwaarde ThresholdForSnapshotting voor is 1. Dit is ook de minimumwaarde. Daarom moet uw app dezelfde uitzondering twee keer activeren voordat er een momentopname wordt gemaakt.
  • Ingesteld IsEnabledInDeveloperMode op true als u momentopnamen wilt genereren tijdens debuggen in Visual Studio.
  • De snelheid voor het maken van momentopnamen wordt beperkt door de SnapshotsPerTenMinutesLimit instelling. De limiet is standaard één momentopname per tien minuten.
  • Er kunnen niet meer dan 50 momentopnamen per dag worden geüpload.

Beperkingen

De standaardperiode voor gegevensretentie is 15 dagen. Voor elke Application Insights is een maximum aantal van 50 momentopnamen per dag toegestaan.

Symbolen publiceren

De Snapshot Debugger vereist symboolbestanden op de productieserver voor het decoderen van variabelen en voor het bieden van een ervaring voor het opsporen van Visual Studio. Versie 15.2 (of hoger) van Visual Studio 2017 publiceert standaard symbolen voor release-builds wanneer deze naar App Service. In eerdere versies moet u de volgende regel toevoegen aan uw publicatieprofielbestand, zodat .pubxml symbolen worden gepubliceerd in de releasemodus:

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

Voor Azure Compute en andere typen moet u ervoor zorgen dat de symboolbestanden zich in dezelfde map van de hoofdtoepassing .dll (meestal) of beschikbaar zijn op het wwwroot/bin huidige pad.

Notitie

Raadpleeg voor meer informatie over de verschillende beschikbare symboolopties de Visual Studio documentatie. Voor de beste resultaten raden we u aan 'Volledig', 'Draagbaar' of 'Ingesloten' te gebruiken.

Geoptimaliseerde builds

In sommige gevallen kunnen lokale variabelen niet worden bekeken in release-builds vanwege optimalisaties die worden toegepast door de JIT-compiler. In Azure-app Services kan de Snapshot Collector deoptimiseren van throwing-methoden die deel uitmaken van het verzamelingsplan.

Tip

Installeer de Application Insights site-extensie in uw App Service om ondersteuning voor deoptimization te krijgen.

Volgende stappen

Schakel Application Insights Snapshot Debugger in voor uw toepassing:

Meer Application Insights Snapshot Debugger: