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:

Prostředí

Podporují se následující prostředí:

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

Oprávnění

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í.

  1. Aplikace vyvolá TrackExceptionvýjimku .

  2. Snapshot Debugger monitoruje výjimky, protože jsou vyvolány přihlášením k odběru AppDomain.CurrentDomain.FirstChanceException události.

  3. 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 .

  4. ID problému události výjimky se vypočítá a porovná s ID problémů v plánu kolekce.

  5. 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.

  6. Po návratu obslužné FirstChanceException rutiny je vyvoláná výjimka zpracována jako normální.

  7. 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:

  1. Vytvoří minidump.

  2. 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 (obvykle wwwroot/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:

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

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 namePřidání pida process 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.0SnapshotCollector 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í na Microsoft.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 zapnuto SnapshotCollectorConfiguration.
  • 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 SnapshotCollectorTelemetryProcessorobjektu Initialized . Je to , CancellationTokenkterý 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í stavu
  • GetSnapshotCollector metoda rozšíření nyní prohledá všechny TelemetrySinks.
  • 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ý AppDomainSnapshotCollector 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ého SnapshotUploader procesu: ShareUploaderProcess (výchozí hodnota trueje ).
  • 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. Soubor Microsoft.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 nebo ShadowCopyFolder 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 prioritu IsLowPrioirtySnapshotUploader je možné přepsat prostřednictvím možnosti.
  • Přidali jsme metodu GetSnapshotCollectorTelemetryConfiguration 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 ExcludeFromSnapshottingSystem.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 na falsehodnotu .

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.