Chybové ukončení App Centeru (Windows)
Důležité
31. března 2025 je naplánované vyřazení z provozu. I když můžete dál používat Visual Studio App Center, dokud ho úplně vyřadíte, existuje několik doporučených alternativ, na které můžete zvážit migraci.
Přečtěte si další informace o časových osách a alternativách podpory.
Chybové ukončení App Center automaticky vygeneruje protokol chybových ukončení pokaždé, když dojde k chybovému ukončení aplikace. Protokol se nejprve zapíše do úložiště zařízení a když uživatel aplikaci znovu spustí, odešle se do App Center zpráva o chybovém ukončení.
Sada App Center SDK shromažďuje pouze chybové ukončení způsobené neošetřenými výjimkami .NET. Neshromažďuje nativní chyby, například při použití jazyka C nebo C++. Pokud ale máte aplikaci s chybami C++, můžete je nahrát do App Center prostřednictvím rozhraní API pro chybové ukončení nahrávání.
Pokud jste v aplikaci ještě nenastavili sadu SDK, postupujte podle Začínáme WPF/WinForms.
Neošetřené výjimky v aplikacích WinForms
Poznámka
Tento oddíl a následující dílčí oddíly platí jenom pro WinForms. Pokud integrujete sadu SDK do WPF, můžete tuto část přeskočit.
Ve výchozím nastavení neošetřená výjimka v aplikaci WinForms neaktivuje chybové ukončení (aplikace se neukončí), pokud není připojený ladicí program.
Místo toho systém Windows uživateli zobrazí dialogové okno s možností pokračovat nebo ukončit spouštění aplikace. V důsledku toho sada App Center SDK nemůže automaticky zachytit tyto výjimky (i když uživatel klikne na tlačítko Ukončit ).
Chybové ukončení se v App Center shromažďuje jenom v případě, že způsobí automatické ukončení aplikace. App Center podporuje jenom jedno chybové ukončení na relaci.
Existují dva způsoby, jak hlásit neošetřené výjimky ve WinForms. Aplikaci je možné nakonfigurovat tak, aby se při neošetřených výjimkách chybově ukončila nebo pokračovala v provozu, ale neošetřené výjimky hlásí jako chyby modulu runtime.
Konfigurace ukončení aplikace při chybovém ukončení
Je to jediný způsob, jak ohlásit neošetřenou výjimku jako chybu v App Center a ukončit aplikaci u neošetřených výjimek.
Provedete to tak, že před inicializací sady SDK zavoláte metodu Windows:
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
AppCenter.Start(...);
Pokud tato možnost není ve vaší aplikaci přijatelná, můžete neošetřenou výjimku ohlásit jako chybu za běhu (jak je popsáno níže).
Nahlášení neošetřené výjimky jako chyby modulu runtime
Pokud vaše aplikace musí běžet i po neošetřené výjimce, nemůžete ji v App Center ohlásit jako chybu , ale místo toho ji můžete ohlásit jako chybu.
K tomu můžete použít následující ukázku kódu:
Application.ThreadException += (sender, args) =>
{
Crashes.TrackError(args.Exception);
};
AppCenter.Start(...);
Poznámka
Když je ladicí program připojený, neošetřené výjimky způsobí ukončení aplikace (chybové ukončení), pokud není obslužná rutina připojena k Application.ThreadException
.
Vygenerování chybového ukončení testu
Aplikace App Center Crashes poskytuje rozhraní API pro vygenerování testovacího chybového ukončení pro snadné testování sady SDK. Toto rozhraní API kontroluje konfiguraci ladění a verze. Můžete ho tedy použít jenom při ladění, protože nebude fungovat pro aplikace vydané verze.
Crashes.GenerateTestCrash();
Získání dalších informací o předchozím chybovém ukončení
Aplikace App Center Crashes má dvě rozhraní API, která poskytují další informace pro případ, že dojde k chybovému ukončení aplikace.
Došlo k chybě aplikace v předchozí relaci?
Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli aplikace při předchozím spuštění havarovala:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
To se hodí pro případ, že chcete upravit chování nebo uživatelské rozhraní aplikace po chybovém ukončení. Někteří vývojáři se rozhodnou zobrazit další uživatelské rozhraní, aby se omluvili svým uživatelům, nebo chtějí, aby se po chybovém ukončení mohli spojit.
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění, vždy se vrátí false
před spuštěním.
Podrobnosti o posledním chybovém ukončení
Pokud vaše aplikace dříve havarovala, můžete získat podrobnosti o posledním chybovém ukončení.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Poznámka
Tuto metodu je možné použít pouze po Crashes
spuštění, vždy se vrátí null
před spuštěním.
Pro toto rozhraní API existuje mnoho případů použití. Nejběžnějším z nich jsou lidé, kteří toto rozhraní API volají a implementují vlastního delegáta nebo naslouchacího procesu chybových ukončení.
Přizpůsobení využití chyb app center
Aplikace App Center Crashes poskytuje vývojářům zpětná volání, která mohou provádět další akce před a při odesílání protokolů chyb do App Center.
Poznámka
Před volánímAppCenter.Start()
nastavte zpětné volání, protože App Center začne zpracovávat chybové ukončení hned po spuštění.
Mělo by se chybové ukončení zpracovat?
Toto zpětné volání nastavte, pokud se chcete rozhodnout, jestli je potřeba zpracovat konkrétní chybové ukončení. Může například dojít k chybovému ukončení na úrovni systému, které byste chtěli ignorovat a které nechcete posílat do App Center.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Požádejte uživatele o souhlas s odesláním protokolu chybových ukončení.
Pokud je pro vás ochrana osobních údajů uživatelů důležitá, můžete před odesláním zprávy o chybovém ukončení do App Center získat potvrzení uživatele. Sada SDK zveřejňuje zpětné volání, které informuje o chybách App Center, aby před odesláním zpráv o chybách čekalo na potvrzení uživatele.
Pokud jste se tak rozhodli, zodpovídáte za získání potvrzení uživatele, například prostřednictvím dialogového okna s jednou z následujících možností: Vždy odeslat, Odeslat a Neposílat. Na základě vstupu řeknete App Center, co dělat, a pak se s chybovým ukončením odpovídajícím způsobem zpracuje.
Poznámka
V sadě SDK se nezobrazuje dialogové okno, aplikace musí poskytnout vlastní uživatelské rozhraní, aby mohla požádat o souhlas uživatele.
Poznámka
Aplikace by neměla volat NotifyUserConfirmation
explicitně, pokud neimplementuje dialogové okno pro potvrzení uživatele. Modul Chybové ukončení bude zpracovávat posílání protokolů implicitně za vás.
Následující zpětné volání ukazuje, jak říct sadě SDK, aby před odesláním chybových ukončení čekala na potvrzení uživatele:
Crashes.ShouldAwaitUserConfirmation = () =>
{
// Build your own UI to ask for user consent here. SDK doesn't provide one by default.
// Return true if you built a UI for user consent and are waiting for user input on that custom UI, otherwise false.
return true;
};
V případě, že se vrátíte true
ve zpětném volání výše, musí vaše aplikace získat (pomocí vlastního kódu) oprávnění uživatele a odeslat zprávu sadě SDK s výsledkem pomocí následujícího rozhraní API.
// Depending on the user's choice, call Crashes.NotifyUserConfirmation() with the right value.
Crashes.NotifyUserConfirmation(UserConfirmation.DontSend);
Crashes.NotifyUserConfirmation(UserConfirmation.Send);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);
Získání informací o stavu odesílání pro protokol chybových ukončení
Někdy chcete znát stav chybového ukončení aplikace. Běžným případem použití je, že můžete chtít zobrazit uživatelské rozhraní, které uživatelům oznámí, že vaše aplikace odesílá zprávu o chybovém ukončení, nebo v případě, že aplikace po spuštění rychle padá, chcete upravit chování aplikace, aby bylo možné odesílat protokoly chybových ukončení. Chybové ukončení App Center poskytuje tři různá zpětná volání, která můžete v aplikaci použít k oznámení o tom, co se děje:
Před odesláním protokolu chyb sdk se vyvolá následující zpětné volání.
Crashes.SendingErrorReport += (sender, e) =>
{
// Your code, e.g. to present a custom UI.
};
V případě, že máme problémy se sítí nebo výpadek koncového bodu a restartujete aplikaci, SendingErrorReport
aktivuje se po restartování procesu znovu.
Následující zpětné volání se vyvolá poté, co sada SDK úspěšně odeslala protokol chybových ukončení.
Crashes.SentErrorReport += (sender, e) =>
{
// Your code, e.g. to hide the custom UI.
};
Pokud se sadě SDK nepodařilo odeslat protokol chybových ukončení, vyvolá se následující zpětné volání.
Crashes.FailedToSendErrorReport += (sender, e) =>
{
// Your code goes here.
};
Příjem FailedToSendErrorReport
znamená, že došlo k neobnovitelné chybě, například ke kódu 4xx . Například hodnota 401 znamená, že appSecret
je špatná.
Toto zpětné volání se neaktivuje, pokud se jedná o problém se sítí. V tomto případě sada SDK stále opakuje pokusy (a pozastavuje opakování, když je síťové připojení mimo provoz).
Přidání příloh do zprávy o chybovém ukončení
Do zprávy o chybovém ukončení můžete přidat binární a textové přílohy. Sada SDK je odešle spolu s chybovým ukončením, abyste je mohli zobrazit na portálu App Center. Následující zpětné volání se vyvolá přímo před odesláním uloženého chybového ukončení z předchozích spuštění aplikace. Když dojde k chybě, nebude vyvolána. Ujistěte se, že soubor přílohy není pojmenovaný minidump.dmp
, protože tento název je vyhrazený pro soubory minidump. Tady je příklad připojení textu a obrázku k chybovému ukončení:
Crashes.GetErrorAttachments = (ErrorReport report) =>
{
// Your code goes here.
return new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
};
Poznámka
Limit velikosti je aktuálně 7 MB. Při pokusu o odeslání větší přílohy dojde k chybě.
Povolení nebo zakázání chybových ukončení app center za běhu
Za běhu můžete povolit a zakázat chybové ukončení app center. Pokud ho zakážete, sada SDK nebude pro aplikaci hlásit žádné chybové ukončení.
Crashes.SetEnabledAsync(false);
Pokud chcete znovu povolit chybové ukončení App Centeru, použijte stejné rozhraní API, ale předejte true
ho jako parametr.
Crashes.SetEnabledAsync(true);
Na toto volání nemusíte čekat, aby byla další volání rozhraní API (například IsEnabledAsync
) konzistentní.
Stav se v úložišti zařízení během spouštění aplikací udržuje.
Kontrola, jestli jsou povolená chybová ukončení App Center
Můžete také zkontrolovat, jestli jsou povolená chybová ukončení app center:
bool isEnabled = await Crashes.IsEnabledAsync();
Zpracovávané chyby
App Center také umožňuje sledovat chyby pomocí zpracovaných výjimek. K tomu použijte metodu TrackError
:
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Aplikace může volitelně připojit vlastnosti ke zprávě o zpracovaných chybách a poskytnout tak další kontext. Předejte vlastnosti jako slovník párů klíč/hodnota (pouze řetězce), jak je znázorněno v následujícím příkladu.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On"}
};
Crashes.TrackError(exception, properties);
}
Volitelně můžete také do sestavy zpracovávané chyby přidat binární a textové přílohy. Předejte přílohy jako pole ErrorAttachmentLog
objektů, jak je znázorněno v následujícím příkladu.
try {
// your code goes here.
} catch (Exception exception) {
var attachments = new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
Crashes.TrackError(exception, attachments: attachments);
}