Ladění výjimek v aplikacích .NET pomocí nástroje Snapshot Debugger
Pomocí nástroje Snapshot Debugger můžete automaticky shromáždit snímek ladění, když dojde k výjimce v živé aplikaci .NET. Shromážděné snímky ladění zobrazují stav zdrojového kódu a proměnných v okamžiku, kdy byla vyvolána výjimka.
Snapshot Debugger v aplikaci Přehledy:
- Monitoruje systémem generované protokoly z vaší webové aplikace.
- Shromažďuje snímky v horních výjimkách.
- Poskytuje informace, které potřebujete k diagnostice problémů v produkčním prostředí.
Přečtěte si další informace o procesech Snapshot Debugger a Snapshot Uploader.
Podporované aplikace a prostředí
Tato část obsahuje seznam podporovaných aplikací a prostředí.
Aplikace
Kolekce snímků je dostupná pro:
- .NET Framework 4.6.2 a novější verze.
- .NET 6.0 nebo novější ve Windows.
Prostředí
Podporují se následující prostředí:
- Azure App Service
- Azure Functions
- Azure Cloud Services se systémem OS family 4 nebo novějším
- Azure Service Fabric běžící na Windows Serveru 2012 R2 nebo novějším
- Azure Virtual Machines a Azure Virtual Machine Scale Sets s Windows Serverem 2012 R2 nebo novějším
- Místní virtuální nebo fyzické počítače s Windows Serverem 2012 R2 nebo novějším nebo Windows 8.1 nebo novějším
Poznámka:
Klientské aplikace (například WPF, model Windows Forms nebo UPW) se nepodporují.
Požadavky pro použití nástroje Snapshot Debugger
Balíčky a konfigurace
- Do své aplikace zahrňte balíček NuGet Snapshot Collectoru.
- Konfigurace parametrů kolekce v souboru
ApplicationInsights.config
.
Oprávnění
- Ověřte, že jste přidáni do role Přehledy Snapshot Debugger aplikace pro cílovou aplikaci Přehledy Snímek.
Jak funguje Snapshot Debugger
Snapshot Debugger se implementuje jako procesor telemetrie Přehledy aplikace. Po spuštění aplikace se do kanálu protokolů vygenerovaných systémem vaší aplikace přidá procesor telemetrie snapshot Debuggeru.
Důležité
Snímky můžou obsahovat osobní údaje nebo jiné citlivé informace v hodnotách proměnných a parametrů. Data snímku se ukládají ve stejné oblasti jako prostředek Přehledy aplikace.
Proces snapshot Debugger
Proces Snapshot Debugger se spustí a končí metodou TrackException
. Snímek procesu je pozastavený klon spuštěného procesu, aby vaši uživatelé neměli žádné přerušení.
Aplikace vyvolá
TrackException
výjimku .Snapshot Debugger monitoruje výjimky, protože jsou vyvolány přihlášením k odběru
AppDomain.CurrentDomain.FirstChanceException
události.Pro ID problému se zvýší čítač.
- Když čítač dosáhne
ThresholdForSnapshotting
hodnoty, ID problému se přidá do plánu kolekce.
Poznámka:
Výchozí
ThresholdForSnapshotting
minimální hodnota je 1. S touto hodnotou musí vaše aplikace před vytvořením snímku aktivovat stejnou výjimku dvakrát .- Když čítač dosáhne
ID problému události výjimky se vypočítá a porovná s ID problémů v plánu kolekce.
Pokud existuje shoda mezi ID problémů, vytvoří se snímek spuštěného procesu.
- Snímek má přiřazen jedinečný identifikátor a výjimka je označena tímto identifikátorem.
Poznámka:
Rychlost vytváření snímků je omezená
SnapshotsPerTenMinutesLimit
nastavením. Ve výchozím nastavení je limitem jeden snímek každých 10 minut.Po návratu obslužné
FirstChanceException
rutiny je vyvoláná výjimka zpracována jako normální.Výjimka znovu dosáhne
TrackException
metody a je hlášena aplikaci Přehledy spolu s identifikátorem snímku.
Poznámka:
Nastavte IsEnabledInDeveloperMode
, true
pokud chcete při ladění v sadě Visual Studio generovat snímky.
Proces nahrání snímku
I když proces Snapshot Debugger nadále běží a obsluhuje provoz uživatelům s malým přerušením, snímek se předá procesu Nahrávání snímků. Nahrání snímku:
Vytvoří minidump.
Nahraje minidump do aplikace Přehledy spolu se všemi relevantními soubory symbolů (.pdb).
Poznámka:
Nelze nahrát více než 50 snímků za den.
Pokud jste povolili Ladicí program snímků, ale nezobrazují se vám snímky, prohlédni si průvodce odstraňováním potíží.
Omezení
Tato část popisuje omezení pro ladicí program snímků.
Uchovávání dat
Snímky ladění se ukládají po dobu 15 dnů. Výchozí zásady uchovávání dat se nastavily pro jednotlivé aplikace. Pokud potřebujete tuto hodnotu zvýšit, můžete požádat o navýšení otevřením případu podpory na webu Azure Portal. Pro každou instanci Přehledy aplikace je povolený maximální počet 50 snímků za den.
Publikování symbolů
Snapshot Debugger vyžaduje soubory symbolů na produkčním serveru, aby:
- Dekódování proměnných
- Poskytnutí prostředí ladění v sadě Visual Studio
Visual Studio 2017 verze 15.2+ ve výchozím nastavení publikuje symboly pro sestavení vydaných verzí při publikování do služby App Service.
V předchozích verzích musíte do souboru profilu
.pubxml
publikování přidat následující řádek, aby se symboly publikovaly v režimu vydání:<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Pro Azure Compute a další typy se ujistěte, že soubory symbolů jsou:
- Ve stejné složce hlavní aplikace
.dll
(obvyklewwwroot/bin
) nebo - K dispozici v aktuální cestě.
Další informace o různých dostupných možnostech symbolů najdete v dokumentaci k sadě Visual Studio. Nejlepších výsledků dosáhnete, když použijete Full, Portable nebo Embedded.
Optimalizované buildy
V některých případech se místní proměnné nedají zobrazit v buildech vydaných verzí kvůli optimalizacím použitým kompilátorem JIT.
Ve službě App Service však může ladicí program snímků deoptimalizovat metody vyvolání metod, které jsou součástí plánu kolekce.
Tip
Nainstalujte rozšíření Application Přehledy Site ve vaší instanci služby App Service, abyste získali podporu deoptimalizace.
Další kroky
Povolte pro aplikaci Přehledy Snapshot Debugger aplikace:
- Azure App Service
- Azure Functions
- Azure Cloud Services
- Azure Service Fabric
- Azure Virtual Machines a škálovací sady virtuálních počítačů
- Místní virtuální nebo fyzické počítače
Poznámky k verzi pro Microsoft.ApplicationInsights.SnapshotCollector
Tato část obsahuje poznámky k Microsoft.ApplicationInsights.SnapshotCollector
verzi balíčku NuGet pro aplikace .NET, které používá program Snapshot Debugger služby Application Přehledy.
Přečtěte si další informace o programu Application Přehledy Snapshot Debugger pro aplikace .NET.
V případě hlášení chyb a zpětné vazby otevřete problém na GitHubu.
Poznámka:
Podpora příjmu dat založeného na instrumentačním klíči skončí 31. března 2025. Příjem klíčů instrumentace bude dál fungovat, ale už nebudeme poskytovat aktualizace ani podporu pro tuto funkci. Přechod na připojovací řetězec, abyste mohli využívat nové funkce.
1.4.6
Bodová verze, která řeší regresi při použití aplikací .NET 8.
Opravy chyb
- Výjimky vyvolané dynamicky generovanými metodami (např. zkompilovanými stromy výrazů) v .NET 8 se nesledují správně. Dlouhodobého.
1.4.5
Bodová verze, která řeší chybu nahlášenou uživatelem.
Opravy chyb
- Opravili jsme accessviolationException při čtení některých souborů PDB.
Změny
- Přidání souboru ReadMe do balíčku NuGet
- Aktualizace msdia140.dll
1.4.4
Bodová verze, která řeší chyby hlášené uživatelem.
Opravy chyb
Změny
- Zprávy o selhání kontroly PDB s nižším počtem zpráv o chybě na upozornění
- Aktualizace msdia140.dll
- Nepoužívejte připojení služby, pokud je ladicí program zakázaný prostřednictvím nastavení rozšíření webu.
1.4.3
Bodová verze, která řeší chyby hlášené uživatelem.
Opravy chyb
- Oprava skrytí závislosti IMDS z nástroje dependency tracker..
- Oprava ArgumentException: telemetryProcessorTypedoes neimplementuje ITelemetryProcessor..
Kolektor snímků používaný prostřednictvím sady SDK se nepodporuje, pokud je povolená funkce spolupráce. Další nepodporovaná scénáře
1.4.2
Bodová verze, která řeší chybu nahlášenou uživatelem.
Opravy chyb
Oprava argumentuException: Delegáti musí být stejného typu.
1.4.1
Bodová verze, která vrátí chybu zavedenou ve verzi 1.4.0.
Opravy chyb
Pevná metoda nebyla v WebJobs nalezena.
1.4.0
Vyřešili jsme několik vylepšení a přidali jsme podporu ověřování Microsoft Entra pro příjem dat Přehledy aplikací.
Změny
- Zmenšená velikost balíčku Snapshot Collector o 60 % z 10,34 MB na 4,11 MB.
- Cílová architektura netstandard2.0 pouze ve službě Snapshot Collector.
- Zvýšení závislosti sady Application Přehledy SDK na verzi 2.15.0
- Přidáno zpět
MinidumpWithThreadInfo
při zápisu výpisů. - Přidání
CompatibilityVersion
pro zlepšení synchronizace mezi agentem snapshot collectoru a nástrojem Snapshot Uploader při zásadních změnách. - Změna
SnapshotUploader
algoritmu pojmenování logfile, aby se zabránilo nadměrnému vstupně-výstupnímu operacím souborů ve službě App Service. role name
Přidánípid
aprocess start time
nahrání metadat objektů blob- Používá se
System.Diagnostics.Process
v nástroji Snapshot Collector a Snapshot Uploader.
Nové funkce
Přidání ověřování Microsoft Entra do SnapshotCollector
. Další informace o ověřování Microsoft Entra v aplikaci Přehledy naleznete v tématu Ověřování Microsoft Entra pro Přehledy aplikace.
1.3.7.5
Point release to backport a fix from 1.4.0-pre.
Opravy chyb
Oprava objektu ObjectDisposedException při vypnutí
1.3.7.4
Bodová verze, která řeší problém zjištěný při testování scénáře připojení bez kódu služby App Service
Změny
Cíl netcoreapp3.0
teď závisí na Microsoft.ApplicationInsights.AspNetCore
>hodnotě >= 2.1.1 (dříve = 2.1.2).
1.3.7.3
Bodová verze, která řeší několik problémů s vysokým dopadem.
Opravy chyb
- Opravili jsme zjišťování PDB ve složce wwwroot/bin , které bylo přerušeno, když jsme změnili vyhledávací algoritmus symbolu ve verzi 1.3.6.
- Opravili jsme hlučnost
ExtractWasCalledMultipleTimesException
v telemetrii.
1.3.7
Změny
Cíl netcoreapp2.0
SnapshotCollector
závisí na Microsoft.ApplicationInsights.AspNetCore
>hodnotě = 2.1.1 (znovu). Tato změna vrátí chování tak, jak bylo před verzí 1.3.5. Pokusili jsme se ho upgradovat ve verzi 1.3.6, ale přerušili jsme některé scénáře služby App Service.
Nové funkce
Snapshot Collector čte a parsuje ConnectionString
z proměnné prostředí APPLICATIONINSIGHTS_CONNECTION_STRING nebo z TelemetryConfiguration
. Primárně se používá k nastavení koncového bodu pro připojení ke službě Snapshot. Další informace najdete v dokumentaci k Připojení ionovým řetězcům.
Opravy chyb
Přepnutí na použití HttpClient
pro všechny cíle s výjimkou net45
toho, že WebRequest
v některých prostředích selhalo kvůli nekompatibilním SecurityProtocol
(vyžaduje protokol TLS 1.2).
1.3.6
Změny
SnapshotCollector
nyní závisí naMicrosoft.ApplicationInsights
>hodnotě = 2.5.1 pro všechny cílové architektury. Tento požadavek může být zásadní změnou, pokud vaše aplikace závisí na starší verzi sady Microsoft.Application Přehledy SDK.- Odebrali jsme podporu protokolu TLS 1.0 a 1.1 v nástroji Snapshot Uploader.
- Období kontroly PDB teď výchozí hodnota je 24 hodin místo 15 minut. Konfigurovatelné přes
PdbRescanInterval
zapnutoSnapshotCollectorConfiguration
. - PdB prohledává jenom složky nejvyšší úrovně místo rekurzivní. Tato změna může být zásadní změnou, pokud jsou symboly v podsložkách binární složky.
Nové funkce
- Obměna
SnapshotUploader
protokolů, aby se zabránilo vyplnění složky protokolů starými soubory. - Podpora deoptimalizace (prostřednictvím ReJIT při připojení) pro aplikace .NET Core 3.0.
- Přidání symbolů do balíčku NuGet
- Při nahrávání minidumps nastavte další metadata.
- Přidání vlastnosti do
SnapshotCollectorTelemetryProcessor
objektuInitialized
. Je to ,CancellationToken
který se zruší při inicializaci a připojení kolektoru snímků ke koncovému bodu služby. - Snímky se teď dají zachytit pro výjimky v dynamicky generovaných metodách. Příkladem jsou zkompilované stromy výrazů generované dotazy Entity Framework.
Opravy chyb
AmbiguousMatchException
načítání kolektoru snímků z důvodu monitorování stavuGetSnapshotCollector
metoda rozšíření nyní prohledá všechnyTelemetrySinks
.- Nezahajujte Snapshot Uploader na nepodporovaných platformách.
- Popisujte
InvalidOperationException
, když deoptimalizujete dynamické metody (například Entity Framework).
1.3.5
- Přidání podpory suverénních cloudů (starší verze nefungují v suverénních cloudech).
- Přidání kolektoru snímků usnadňuje použití .
AddSnapshotCollector()
Další informace najdete v tématu Povolení ladicího programu snímků pro aplikace .NET ve službě Aplikace Azure Service. - K ověření bloků objektů blob použijte nastavení FISMA MD5. Toto nastavení zabrání výchozímu kryptografickému algoritmu .NET MD5, který není k dispozici, když je operační systém nastavený na režim kompatibilní se standardem FIPS.
- Při deoptimalizaci volání funkcí ignorujte rámce rozhraní .NET Framework. Toto chování můžete řídit nastavením
DeoptimizeIgnoredModules
konfigurace. DeoptimizeMethodCount
Přidání nastavení konfigurace, které umožňuje deoptimalizaci více než jednoho volání funkce.
1.3.4
- Povolené strukturované instrumentační klíče.
- Zvýšená odolnost uploaderu snímků Pokračujte ve spuštění i v případě, že staré protokoly nahrávače nejde přesunout.
- Opakované generování sestav další telemetrie při okamžitém ukončení SnapshotUploader.exe (bylo zakázáno ve verzi 1.3.3).
- Zjednodušená interní telemetrie.
- Experimentální funkce: Plány kolekce snappointu: Přidat
snapshotOnFirstOccurence
. Další informace najdete v tomto článku na GitHubu.
1.3.3
Opravili jsme chybu, která způsobovala , že SnapshotUploader.exe přestala reagovat a neodesílala snímky pro aplikace .NET Core.
1.3.2
- Experimentální funkce: Plány kolekce snappointu Další informace najdete v tomto článku na GitHubu.
- SnapshotUploader.exe se ukončí, když modul runtime uvolní načtený
AppDomain
SnapshotCollector
modul runtime místo čekání na ukončení procesu. Tato akce zlepšuje spolehlivost kolektoru při hostované službě IIS. - Přidání konfigurace, která umožňuje více
SnapshotCollector
instancím, které používají stejný instrumentační klíč ke sdílení stejnéhoSnapshotUploader
procesu:ShareUploaderProcess
(výchozí hodnotatrue
je ). - Při okamžitém ukončení SnapshotUploader.exe hlášena další telemetrie.
- Snížil se počet podpůrných souborů SnapshotUploader.exe musí zapisovat na disk.
1.3.1
- Odebraná podpora shromažďování snímků pomocí rozhraní RTlCloneUserProcess API a podporuje pouze rozhraní PSsCaptureSnapshots API.
- Zvýšili jsme výchozí limit počtu snímků, které se dají zachytit za 10 minut z jednoho na tři.
- Povolit SnapshotUploader.exe vyjednat protokol TLS 1.1 a 1.2.
- Nahlášení další telemetrie při
SnapshotUploader
zaznamenávání upozornění nebo chyby - Ukončení pořizování snímků, když back-endová služba hlásí dosažení denní kvóty (50 snímků za den).
- Přidání dodatečného vrácení se změnami SnapshotUploader.exe , aby se dvě instance mohly spouštět ve stejnou dobu.
1.3.0
Změny
- U aplikací, které cílí na rozhraní .NET Framework, teď kolektor snímků závisí na microsoft.Application Přehledy verze 2.3.0 nebo novější. Používá se jako verze 2.2.0 nebo novější. Věříme, že tato změna nebude pro většinu aplikací problém. Dejte nám vědět, jestli vám tato změna brání v používání nejnovějšího kolektoru snímků.
- Při opakovaném pokusu o neúspěšné nahrávání použijte exponenciální prodlevy při nahrávání snímků.
- Používejte
ServerTelemetryChannel
(pokud je k dispozici) pro spolehlivější generování sestav telemetrie. - Použije se
SdkInternalOperationsMonitor
při počátečním připojení ke službě Snapshot Debugger, aby sledování závislostí ignorovala. - Vylepšená telemetrie kolem počátečního připojení k ladicím programu Snapshot Debugger.
- Oznamte další telemetrii pro:
- Verze služby App Service.
- Výpočetní instance Azure.
- Jsou jím kontejnery.
- Aplikace Azure Functions
Opravy chyb
- Pokud je interval resetování čítače problému nastavený na 24 dnů, interpretujte ho jako 24 hodin.
- Opravili jsme chybu, kdy nahrávání snímků přestalo zpracovávat nové snímky, pokud při odstraňování snímku došlo k výjimce.
1.2.3
Opravili jsme podepisování silného názvu pomocí binárních souborů Snapshot Uploaderu.
1.2.2
Změny
- Soubory potřebné pro SnapshotUploader(64).exe jsou nyní vloženy jako prostředky v hlavní knihovně DLL. To znamená
SnapshotCollectorFiles
, že složka se už nevytvořila, což zjednodušuje sestavování a nasazování a snižuje nepotřebné prvky v Průzkumník řešení. Při upgradu dbejte na to, abyste zkontrolovali změny v.csproj
souboru. SouborMicrosoft.ApplicationInsights.SnapshotCollector.targets
už není potřeba. - Telemetrie se protokoluje do vašeho prostředku aplikace Přehledy i v případě, že
ProvideAnonymousTelemetry
je nastavená na false. Tato změna spočívá v implementaci funkce kontroly stavu na webu Azure Portal.ProvideAnonymousTelemetry
ovlivňuje pouze telemetrii odesílanou Microsoftu pro podporu a vylepšení produktů. - Pokud
TempFolder
neboShadowCopyFolder
jsou přesměrováni na proměnné prostředí, ponechte kolektor nečinný, dokud tyto proměnné prostředí nejsou nastaveny. - Pro aplikace, které se připojují k internetu přes proxy server, teď Snapshot Collector automaticky dedetkuje všechna nastavení proxy serveru a předává je do SnapshotUploader.exe.
- Snižte prioritu
SnapshotUploader
procesu (pokud je to možné). Tuto priorituIsLowPrioirtySnapshotUploader
je možné přepsat prostřednictvím možnosti. - Přidali jsme metodu
GetSnapshotCollector
TelemetryConfiguration
rozšíření pro scénáře, ve kterých chcete konfigurovat kolektor snímků programově. - Nastavte verzi sady Application Přehledy SDK (místo verze aplikace) v telemetrii pro zákazníky.
- Odešle první událost prezenčních signálů po dvou minutách.
Opravy chyb
- Opraveno
NullReferenceException
, když výjimky mají slovníky dat null nebo neměnné. - V nahrávacím nástroji zkuste soubor PDB opakovat několikrát, pokud dojde k narušení sdílení.
- Oprava duplicitní telemetrie, když při spuštění do kanálu telemetrie volá více než jedno vlákno
1.2.1
Změny
- Soubory komentářů dokumentu XML jsou teď součástí balíčku NuGet.
- Přidali jsme metodu
ExcludeFromSnapshotting
System.Exception
rozšíření pro scénáře, ve kterých víte, že máte hlučnou výjimku a chcete se vyhnout vytváření snímků. - Byla přidána
IsEnabledWhenProfiling
vlastnost konfigurace, která má výchozí hodnotu true. Jedná se o změnu z předchozích verzí, kdy vytváření snímků bylo dočasně zakázáno, pokud aplikace Přehledy Profiler prováděla podrobnou kolekci. Původní chování lze obnovit nastavením této vlastnosti nafalse
hodnotu .
Opravy chyb
- Podepište SnapshotUploader64.exe správně.
- Chraňte před dvojitou inicializací procesoru telemetrie.
- Zabránit dvojitému protokolování telemetrie v aplikacích s více kanály
- Opravili jsme chybu s dobou vypršení platnosti plánu kolekce, která mohla bránit snímkům po 24 hodinách.
1.2.0
Největší změnou v této verzi (proto přechod na nové číslo podverze) je přepsání kanálu pro vytvoření a zpracování snímku. V předchozích verzích byla tato funkce implementována v nativním kódu (ProductionBreakpoints.dll* a SnapshotHolder.exe*). Nová implementace je veškerý spravovaný kód s voláním nespravovaného kódu.
Pro tuto první verzi s použitím nového kanálu jsme neměli daleko od původního chování. Nová implementace umožňuje lepší zasílání zpráv o chybách a nastavuje nás pro budoucí vylepšení.
Další změny v této verzi
- MinidumpUploader.exe byl přejmenován na SnapshotUploader.exe (nebo SnapshotUploader64.exe).
- Přidání telemetrie časování do požadavků DeOptimize/ReOptimize
- Přidání komprese gzip pro nahrávání minidump.
- Opravili jsme problém, kdy se soubory PDB zamkly, aby se zabránilo upgradu webu.
- Při stínové kopírování protokolujte původní název složky (SnapshotCollectorFiles).
- Upravená omezení paměti pro 64bitové procesy, aby se zabránilo restartování lokality kvůli OOM.
- Opravili jsme problém, kdy se snímky stále shromažďovaly i po zakázání.
- Protokolování událostí prezenčních signálů do prostředku AI zákazníka
- Vylepšili jsme rychlost snímků odebráním zdroje z ID problému.
1.1.2
Změny
- Rozšířená telemetrie využití
- Zjištění a hlášení verze a operačního systému .NET
- Detekce a hlášení dalších prostředí Azure (Azure Cloud Services, Azure Service Fabric)
- Zaznamenávání a hlášení metrik výjimek (počet výjimek s první šancí a počet
TrackException
volání) v telemetrii prezenčních signálů
Opravy chyb
- Správné zpracování
SqlException
, kdy není vyvolán vnitřní výjimka (Win32Exception). - Oříznuté koncové mezery ve složkách symbolů, které způsobily nesprávnou analýzu argumentů příkazového řádku .
MinidumpUploader
- Zabránilo nekonečnému opakování neúspěšných připojení ke koncovému bodu agenta Snapshot Debugger.
1.1.0
Změny
- Byla přidána ochrana paměti hostitele. Tato funkce snižuje dopad na paměť hostitelského počítače.
- Vylepšili jsme prostředí pro zobrazení snímků na webu Azure Portal.