Felsöka undantag i .NET-program med hjälp av felsökningsprogrammet för ögonblicksbilder

Med Snapshot Debugger kan du automatiskt samla in en ögonblicksbild av felsökning när ett undantag inträffar i ditt live-.NET-program. Felsökningsögonblicksbilder som samlats in visar tillståndet för källkod och variabler när undantaget utlöstes.

Felsökningsprogrammet för ögonblicksbilder i Application Insights:

  • Övervakar systemgenererade loggar från webbappen.
  • Samlar in ögonblicksbilder på de vanligaste undantagen.
  • Innehåller information som du behöver för att diagnostisera problem i produktion.

Läs mer om processerna för felsökning av ögonblicksbilder och uppladdning av ögonblicksbilder.

Program och miljöer som stöds

I det här avsnittet visas de program och miljöer som stöds.

Appar

Ögonblicksbildsamling är tillgänglig för:

Miljöer

Följande miljöer stöds:

Kommentar

Klientprogram (till exempel WPF, Windows Forms eller UWP) stöds inte.

Förutsättningar för att använda felsökningsprogrammet för ögonblicksbilder

Paket och konfigurationer

Behörigheter

Så här fungerar felsökningsprogrammet för ögonblicksbilder

Felsökningsprogrammet för ögonblicksbilder implementeras som en Application Insights-telemetriprocessor. När programmet körs läggs telemetriprocessorn snapshot debugger till i programmets systemgenererade loggpipeline.

Viktigt!

Ögonblicksbilder kan innehålla personuppgifter eller annan känslig information i variabel- och parametervärden. Ögonblicksbildsdata lagras i samma region som application insights-resursen.

Felsökningsprocess för ögonblicksbilder

Felsökningsprocessen för ögonblicksbilder startar och slutar med TrackException -metoden. En processögonblicksbild är en pausad klon av den pågående processen, så att användarna upplever lite eller inget avbrott.

  1. Programmet genererar TrackException.

  2. Felsökningsprogrammet för ögonblicksbilder övervakar undantag när de genereras genom att prenumerera på AppDomain.CurrentDomain.FirstChanceException händelsen.

  3. En räknare ökas för problem-ID:t.

    • När räknaren når ThresholdForSnapshotting värdet läggs problem-ID:t till i en samlingsplan.

    Kommentar

    Standardvärdet ThresholdForSnapshotting är 1. Med det här värdet måste appen utlösa samma undantag två gånger innan en ögonblicksbild skapas.

  4. Undantagshändelsens problem-ID beräknas och jämförs med problem-ID:na i samlingsplanen.

  5. Om det finns en matchning mellan problem-ID:t skapas en ögonblicksbild av den process som körs.

    • Ögonblicksbilden tilldelas en unik identifierare och undantaget stämplas med den identifieraren.

    Kommentar

    Genereringshastigheten för ögonblicksbilder begränsas av inställningen SnapshotsPerTenMinutesLimit . Som standard är gränsen en ögonblicksbild var 10:e minut.

  6. FirstChanceException När hanteraren har returnerats bearbetas undantaget som vanligt.

  7. Undantaget når TrackException metoden igen och rapporteras till Application Insights, tillsammans med ögonblicksbildidentifieraren.

Kommentar

Ange IsEnabledInDeveloperMode till true om du vill generera ögonblicksbilder när du felsöker i Visual Studio.

Uppladdningsprocess för ögonblicksbilder

Medan felsökningsprocessen för ögonblicksbilder fortsätter att köras och hantera trafik till användare med lite avbrott, överlämnas ögonblicksbilden till uppladdningsprocessen för ögonblicksbilder. Uppladdningsverktyget för ögonblicksbilder:

  1. Skapar en minidump.

  2. Laddar upp minidumpen till Application Insights, tillsammans med relevanta symbolfiler (.pdb).

Kommentar

Högst 50 ögonblicksbilder per dag kan laddas upp.

Om du har aktiverat felsökningsprogrammet för ögonblicksbilder men inte ser ögonblicksbilder kan du läsa felsökningsguiden.

Begränsningar

I det här avsnittet beskrivs begränsningar för felsökningsprogrammet för ögonblicksbilder.

  • Datakvarhållning

    Ögonblicksbilder av felsökning lagras i 15 dagar. Standardprincipen för datakvarhållning anges per program. Om du behöver öka det här värdet kan du begära en ökning genom att öppna ett supportärende i Azure-portalen. För varje Application Insights-instans tillåts högst 50 ögonblicksbilder per dag.

  • Publicera symboler

    Felsökningsprogrammet för ögonblicksbilder kräver symbolfiler på produktionsservern för att:

    • Avkoda variabler
    • Tillhandahålla en felsökningsupplevelse i Visual Studio

    Som standard publicerar Visual Studio 2017 version 15.2+ symboler för versionsversioner när den publiceras till App Service.

    I tidigare versioner måste du lägga till följande rad i publiceringsprofilfilen .pubxml så att symboler publiceras i versionsläge:

         <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
    

    För Azure Compute och andra typer kontrollerar du att symbolfilerna antingen är:

    • I samma mapp i huvudprogrammet .dll (vanligtvis wwwroot/bin), eller
    • Tillgänglig på den aktuella sökvägen.

    Mer information om de olika symbolalternativen som är tillgängliga finns i Visual Studio-dokumentationen. För bästa resultat rekommenderar vi att du använder Full, Portable eller Embedded.

  • Optimerade versioner

    I vissa fall kan lokala variabler inte visas i versionsversioner på grund av optimeringar som tillämpas av JIT-kompilatorn.

    I App Service kan dock felsökningsprogrammet för ögonblicksbilder avoptimera utkastningsmetoder som ingår i insamlingsplanen.

    Dricks

    Installera Application Insights-webbplatstillägget i din instans av App Service för att få stöd för avoptimisering.

Nästa steg

Aktivera Application Insights Snapshot-felsökningsprogrammet för ditt program:

Viktig information för Microsoft.ApplicationInsights.SnapshotCollector

Det här avsnittet innehåller viktig information för Microsoft.ApplicationInsights.SnapshotCollector NuGet-paketet för .NET-program, som används av Application Insights Snapshot Debugger.

Läs mer om Application Insights Snapshot Debugger för .NET-program.

Öppna ett problem på GitHub för felrapporter och feedback.

Kommentar

Stödet för inmatning av instrumentationsnycklar upphör den 31 mars 2025. Inmatningen av instrumenteringsnyckeln fortsätter att fungera, men vi kommer inte längre att tillhandahålla uppdateringar eller stöd för funktionen. Övergå till anslutningssträng för att dra nytta av nya funktioner.

1.4.6

En punktversion för att hantera en regression när du använder .NET 8-program.

Felkorrigeringar

  • Undantag som genereras från dynamiskt genererade metoder (t.ex. kompilerade uttrycksträd) i .NET 8 spåras inte korrekt. Fast.

1.4.5

En punktversion för att åtgärda ett användarrapporterat fel.

Felkorrigeringar

  • AccessViolationException har åtgärdats vid läsning av vissa PDF-filer.

Ändringar

  • Ett ReadMe har lagts till i NuGet-paketet.
  • Uppdaterade msdia140.dll.

1.4.4

En punktversion för att hantera användarrapporterade buggar.

Felkorrigeringar

Ändringar

  • Sänkta PDB-genomsökningsfelmeddelanden från Fel till Varning.
  • Uppdaterade msdia140.dll.
  • Undvik att upprätta en tjänstanslutning om felsökningsprogrammet är inaktiverat via inställningar för webbplatstillägg.

1.4.3

En punktversion för att hantera användarrapporterade buggar.

Felkorrigeringar

1.4.2

En punktversion för att åtgärda ett användarrapporterat fel.

Felkorrigeringar

Fast ArgumentException: Ombud måste vara av samma typ.

1.4.1

En punktversion för att återställa en icke-bakåtkompatibel ändring som introducerades i 1.4.0.

Felkorrigeringar

Det gick inte att hitta metoden i WebJobs.

1.4.0

Åtgärdade flera förbättringar och lade till stöd för Microsoft Entra-autentisering för Application Insights-inmatning.

Ändringar

  • Minskade paketstorleken för ögonblicksbildinsamlaren med 60 % från 10,34 MB till 4,11 MB.
  • Endast mål för netstandard2.0 i Snapshot Collector.
  • Application Insights SDK-beroendet har stötts till 2.15.0.
  • Har lagts till när MinidumpWithThreadInfo du skriver dumpar.
  • Har lagts CompatibilityVersion till för att förbättra synkroniseringen mellan agenten för ögonblicksbildinsamlaren och uppladdningen av ögonblicksbilder vid icke-bakåtkompatibla ändringar.
  • LogFile-namngivningsalgoritmen ändrades SnapshotUploader för att undvika överdriven fil-I/O i App Service.
  • Lade till pid, role nameoch process start time till uppladdade blobmetadata.
  • Används System.Diagnostics.Process i Snapshot Collector och Snapshot Uploader.

Nya funktioner

Microsoft Entra-autentisering har lagts till i SnapshotCollector. Mer information om Microsoft Entra-autentisering i Application Insights finns i Microsoft Entra-autentisering för Application Insights.

1.3.7.5

En punktversion för att backportera en korrigering från 1.4.0-pre.

Felkorrigeringar

ObjectDisposedException har åtgärdats vid avstängning.

1.3.7.4

En punktversion för att åtgärda ett problem som upptäcktes vid testning av scenariot med kodlös bifogad App Service.

Ändringar

Målet netcoreapp3.0 beror nu på Microsoft.ApplicationInsights.AspNetCore>= 2.1.1 (tidigare >= 2.1.2).

1.3.7.3

En punktversion för att åtgärda ett par problem med hög påverkan.

Felkorrigeringar

  • PdB-identifieringen har åtgärdats i mappen wwwroot/bin , som bröts när vi ändrade algoritmen för symbolsökning i 1.3.6.
  • Fast brus ExtractWasCalledMultipleTimesException i telemetri.

1.3.7

Ändringar

Målet netcoreapp2.0SnapshotCollector för beror på Microsoft.ApplicationInsights.AspNetCore>= 2.1.1 (igen). Den här ändringen återställer beteendet till hur det var före 1.3.5. Vi försökte uppgradera den i 1.3.6, men det bröt vissa App Service-scenarier.

Nya funktioner

Snapshot Collector läser och parsar ConnectionString från miljövariabeln APPLICATIONINSIGHTS_CONNECTION_STRING eller från TelemetryConfiguration. I första hand används den för att ange slutpunkten för att ansluta till ögonblicksbildtjänsten. Mer information finns i dokumentationen om Anslut ionssträngar.

Felkorrigeringar

Växlades till att använda HttpClient för alla mål förutom net45 på grund WebRequest av att det inte gick i vissa miljöer på grund av en inkompatibel SecurityProtocol (kräver TLS 1.2).

1.3.6

Ändringar

  • SnapshotCollector beror nu på Microsoft.ApplicationInsights>= 2.5.1 för alla målramverk. Det här kravet kan vara en icke-bakåtkompatibel ändring om ditt program är beroende av en äldre version av Microsoft.ApplicationInsights SDK.
  • Stöd för TLS 1.0 och 1.1 i Snapshot Uploader har tagits bort.
  • Perioden för PDB-genomsökningar är nu som standard 24 timmar i stället för 15 minuter. Kan konfigureras via PdbRescanIntervalSnapshotCollectorConfiguration.
  • PDB-genomsökning söker endast efter mappar på den översta nivån i stället för rekursiv. Den här ändringen kan vara en icke-bakåtkompatibel ändring om dina symboler finns i undermappar i den binära mappen.

Nya funktioner

  • Logga in SnapshotUploader för att undvika att fylla i loggmappen med gamla filer.
  • Stöd för avoptimisering (via ReJIT vid koppling) för .NET Core 3.0-program.
  • Symboler har lagts till i NuGet-paketet.
  • Ange fler metadata när du laddar upp minidumps.
  • Initialized En egenskap har lagts till i SnapshotCollectorTelemetryProcessor. Det är en CancellationToken, som avbryts när ögonblicksbildinsamlaren initieras och ansluts till tjänstslutpunkten.
  • Ögonblicksbilder kan nu hämtas för undantag i dynamiskt genererade metoder. Ett exempel är de kompilerade uttrycksträd som genereras av Entity Framework-frågor.

Felkorrigeringar

  • AmbiguousMatchException inläsning av ögonblicksbildinsamlare på grund av statusövervakaren.
  • GetSnapshotCollector extension-metoden söker nu igenom alla TelemetrySinks.
  • Starta inte uppladdningen av ögonblicksbilder på plattformar som inte stöds.
  • Hantera InvalidOperationException när du avoptimera dynamiska metoder (till exempel Entity Framework).

1.3.5

  • Stöd har lagts till för nationella moln (äldre versioner fungerar inte i nationella moln).
  • Det blir enklare att lägga till Ögonblicksbildinsamlare med hjälp AddSnapshotCollector()av . Mer information finns i Aktivera felsökningsprogram för ögonblicksbilder för .NET-appar i Azure App Service.
  • Använd FISMA MD5-inställningen för att verifiera blobblock. Den här inställningen undviker standardkrypteringsalgoritmen .NET MD5, som inte är tillgänglig när operativsystemet är inställt på FIPS-kompatibelt läge.
  • Ignorera .NET Framework-ramar när funktionsanrop avoptimeras. Kontrollera det här beteendet med konfigurationsinställningen DeoptimizeIgnoredModules .
  • Lade till konfigurationsinställningen DeoptimizeMethodCount som tillåter avoptimering av fler än ett funktionsanrop.

1.3.4

  • Tillåtna strukturerade instrumentationsnycklar.
  • Ökad robusthet för Snapshot Uploader. Fortsätt att starta även om gamla uppladdningsloggar inte kan flyttas.
  • Återaktiverad rapportering av mer telemetri när SnapshotUploader.exe avslutas omedelbart (inaktiverades i 1.3.3).
  • Förenklad intern telemetri.
  • Experimentell funktion: Snappoint-samlingsplaner: Lägg till snapshotOnFirstOccurence. Mer information finns i den här GitHub-artikeln.

1.3.3

Ett fel som gjorde att SnapshotUploader.exe slutade svara och inte ladda upp ögonblicksbilder för .NET Core-appar har åtgärdats.

1.3.2

  • Experimentell funktion: Snappoint-samlingsplaner. Mer information finns i den här GitHub-artikeln.
  • SnapshotUploader.exe avslutas när körningen tar bort från AppDomain vilken SnapshotCollector läses in, i stället för att vänta på att processen ska avslutas. Den här åtgärden förbättrar insamlarens tillförlitlighet när den finns i IIS.
  • Konfigurationen har lagts till för att tillåta att flera SnapshotCollector instanser som använder samma instrumentationsnyckel delar samma SnapshotUploader process: ShareUploaderProcess (standardvärdet är true).
  • Rapporterade mer telemetri när SnapshotUploader.exe avslutas omedelbart.
  • Minskade antalet supportfiler SnapshotUploader.exe behöver skriva till disk.

1.3.1

  • Stöd för insamling av ögonblicksbilder med RtlCloneUserProcess API har tagits bort och stöder endast PssCaptureSnapshots API.
  • Ökade standardgränsen för hur många ögonblicksbilder som kan avbildas på 10 minuter från ett till tre.
  • Tillåt SnapshotUploader.exe att förhandla om TLS 1.1 och 1.2.
  • Rapporterade mer telemetri när SnapshotUploader du loggar en varning eller ett fel.
  • Sluta ta ögonblicksbilder när serverdelstjänsten rapporterar att den dagliga kvoten har nåtts (50 ögonblicksbilder per dag).
  • Extra incheckning har lagts till SnapshotUploader.exe för att inte tillåta att två instanser körs på samma gång.

1.3.0

Ändringar

  • För program som riktar in sig på .NET Framework är Snapshot Collector nu beroende av Microsoft.ApplicationInsights version 2.3.0 eller senare. Det brukade vara 2.2.0 eller senare. Vi tror inte att den här ändringen är ett problem för de flesta program. Meddela oss om den här ändringen hindrar dig från att använda den senaste ögonblicksbildinsamlaren.
  • Använd exponentiella säkerhetskopieringsfördröjningar i snapshot uploader när du försöker ladda upp igen.
  • Använd ServerTelemetryChannel (om tillgängligt) för mer tillförlitlig rapportering av telemetri.
  • Använd SdkInternalOperationsMonitor den första anslutningen till tjänsten Snapshot Debugger så att beroendespårning ignorerar den.
  • Förbättrad telemetri kring den inledande anslutningen till felsökningsprogrammet för ögonblicksbilder.
  • Rapportera mer telemetri för:
    • App Service-version.
    • Azure-beräkningsinstanser.
    • Containrar.
    • Azure Functions-app.

Felkorrigeringar

  • När återställningsintervallet för problemräknaren är inställt på 24 dagar tolkar du det som 24 timmar.
  • En bugg har åtgärdats där uppladdningen av ögonblicksbilder skulle sluta bearbeta nya ögonblicksbilder om det fanns ett undantag när en ögonblicksbild skulle exponeras.

1.2.3

En stark namnsignering har åtgärdats med binärfiler för Snapshot Uploader.

1.2.2

Ändringar

  • De filer som behövs för SnapshotUploader(64).exe är nu inbäddade som resurser i huvud-DLL:en. Det innebär att SnapshotCollectorFiles mappen inte längre skapas, vilket förenklar bygget och distributionen och minskar oredan i Solution Explorer. Var försiktig när du uppgraderar för att granska ändringarna i filen .csproj . Filen Microsoft.ApplicationInsights.SnapshotCollector.targets behövs inte längre.
  • Telemetri loggas till Application Insights-resursen även om ProvideAnonymousTelemetry den är inställd på false. Den här ändringen är så att vi kan implementera en funktion för hälsokontroll i Azure-portalen. ProvideAnonymousTelemetry påverkar endast telemetrin som skickas till Microsoft för produktsupport och förbättring.
  • När TempFolder eller ShadowCopyFolder omdirigeras till miljövariabler håller du insamlaren inaktiv tills dessa miljövariabler har angetts.
  • För program som ansluter till Internet via en proxyserver identifierar Snapshot Collector nu alla proxyinställningar automatiskt och skickar dem vidare till SnapshotUploader.exe.
  • Sänk prioriteten för SnapshotUploader processen (där det är möjligt). Den här prioriteten kan åsidosättas via alternativet IsLowPrioirtySnapshotUploader .
  • Lade till en GetSnapshotCollector tilläggsmetod TelemetryConfiguration för scenarier där du vill konfigurera Ögonblicksbildssamlaren programmatiskt.
  • Ange Application Insights SDK-versionen (i stället för programversionen) i kundriktad telemetri.
  • Skicka den första pulsslagshändelsen efter två minuter.

Felkorrigeringar

  • Åtgärdat NullReferenceException när undantag har null- eller oföränderliga dataordlistor.
  • I uppladdaren försöker du matcha PDB igen några gånger om vi får en delningsöverträdelse.
  • Åtgärda duplicerad telemetri när fler än en tråd anropar telemetripipelinen vid start.

1.2.1

Ändringar

  • XML Doc-kommentarsfiler ingår nu i NuGet-paketet.
  • Lade till en ExcludeFromSnapshotting tilläggsmetod System.Exception för scenarier där du vet att du har ett brusande undantag och vill undvika att skapa ögonblicksbilder för det.
  • IsEnabledWhenProfiling En konfigurationsegenskap har lagts till som standard till true. Det här är en ändring från tidigare versioner där skapande av ögonblicksbilder tillfälligt inaktiverades om Application Insights Profiler utförde en detaljerad samling. Det gamla beteendet kan återställas genom att ställa in den här egenskapen på false.

Felkorrigeringar

  • Signera SnapshotUploader64.exe korrekt.
  • Skydda mot dubbel initiering av telemetriprocessorn.
  • Förhindra dubbel loggning av telemetri i appar med flera pipelines.
  • En bugg har åtgärdats med förfallotiden för en samlingsplan, vilket kan förhindra ögonblicksbilder efter 24 timmar.

1.2.0

Den största ändringen i den här versionen (därav övergången till ett nytt delversionsnummer) är en omskrivning av pipelinen för skapande och hantering av ögonblicksbilder. I tidigare versioner implementerades den här funktionen i inbyggd kod (ProductionBreakpoints.dll* och SnapshotHolder.exe*). Den nya implementeringen är all hanterad kod med P/Invokes.

För den här första versionen med den nya pipelinen har vi inte avvikit långt från det ursprungliga beteendet. Den nya implementeringen möjliggör bättre felrapportering och konfigurerar oss för framtida förbättringar.

Andra ändringar i den här versionen

  • MinidumpUploader.exe har bytt namn till SnapshotUploader.exe (eller SnapshotUploader64.exe).
  • Tidstelemetri har lagts till i DeOptimize/ReOptimize-begäranden.
  • Gzip-komprimering har lagts till för minidumpuppladdningar.
  • Ett problem där PDF-filer låstes som förhindrar platsuppgradering har åtgärdats.
  • Logga det ursprungliga mappnamnet (SnapshotCollectorFiles) vid skuggkopiering.
  • Justerade minnesgränser för 64-bitarsprocesser för att förhindra omstarter av platsen på grund av OOM.
  • Åtgärdade ett problem där ögonblicksbilder fortfarande samlades in även efter inaktivering.
  • Logga pulsslagshändelser till kundens AI-resurs.
  • Förbättrad hastighet för ögonblicksbilder genom att ta bort "Källa" från problem-ID:t.

1.1.2

Ändringar

  • Telemetri för utökad användning.
  • Identifiera och rapportera .NET-version och operativsystem.
  • Identifiera och rapportera fler Azure-miljöer (Azure Cloud Services, Azure Service Fabric).
  • Registrera och rapportera undantagsmått (antal undantag från första chansen och antalet TrackException anrop) i telemetri för pulsslag.

Felkorrigeringar

  • Korrekt hantering av SqlException var det inre undantaget (Win32Exception) inte genereras.
  • Trimmade avslutande blanksteg i symbolmappar, vilket orsakade en felaktig parsning av kommandoradsargument till MinidumpUploader.
  • Förhindrade oändligt återförsök av misslyckade anslutningar till slutpunkten för ögonblicksbildsfelsökaren.

1.1.0

Ändringar

  • Värdminnesskydd har lagts till. Den här funktionen minskar påverkan på värddatorns minne.
  • Förbättrade visningsupplevelsen för ögonblicksbilder i Azure-portalen.