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:
- .NET Framework 4.6.2 och senare versioner.
- .NET 6.0 eller senare i Windows.
Miljöer
Följande miljöer stöds:
- Azure App Service
- Azure Functions
- Azure Cloud Services som kör OS-familj 4 eller senare
- Azure Service Fabric körs på Windows Server 2012 R2 eller senare
- Azure Virtual Machines och Azure Virtual Machine Scale Sets som kör Windows Server 2012 R2 eller senare
- Lokala virtuella eller fysiska datorer som kör Windows Server 2012 R2 eller senare eller Windows 8.1 eller senare
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
- Inkludera NuGet-paketet För ögonblicksbildinsamlare i ditt program.
- Konfigurera samlingsparametrar i
ApplicationInsights.config
.
Behörigheter
- Kontrollera att du har lagts till i application insights-felsökningsrollen för application insights-målögonblicksbilden.
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.
Programmet genererar
TrackException
.Felsökningsprogrammet för ögonblicksbilder övervakar undantag när de genereras genom att prenumerera på
AppDomain.CurrentDomain.FirstChanceException
händelsen.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.- När räknaren når
Undantagshändelsens problem-ID beräknas och jämförs med problem-ID:na i samlingsplanen.
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.FirstChanceException
När hanteraren har returnerats bearbetas undantaget som vanligt.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:
Skapar en minidump.
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
(vanligtviswwwroot/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:
- Azure App Service
- Azure Functions
- Azure Cloud Services
- Azure Service Fabric
- Skalningsuppsättningar för virtuella Azure-datorer och virtuella datorer
- Lokala virtuella eller fysiska datorer
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
- Ett undantag har åtgärdats vid inbyggda komponentextrahering vid användning av ett enda filprogram.
Ä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
- Det gick inte att dölja IMDS-beroendet från beroendespåraren.
- Fast ArgumentException: telemetryProcessorTypedoes implementerar inte ITelemetryProcessor..
Ögonblicksbildinsamlare som används via SDK stöds inte när Interop-funktionen är aktiverad. Se Fler scenarier som inte stöds.
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 name
ochprocess 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.0
SnapshotCollector
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
PdbRescanInterval
påSnapshotCollectorConfiguration
. - 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 iSnapshotCollectorTelemetryProcessor
. Det är enCancellationToken
, 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 allaTelemetrySinks
.- 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
vilkenSnapshotCollector
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 sammaSnapshotUploader
process:ShareUploaderProcess
(standardvärdet ärtrue
). - 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
. FilenMicrosoft.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
ellerShadowCopyFolder
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 alternativetIsLowPrioirtySnapshotUploader
. - Lade till en
GetSnapshotCollector
tilläggsmetodTelemetryConfiguration
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äggsmetodSystem.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.