Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Visual Studio App Center bylo vyřazeno 31. března 2025 s výjimkou funkcí Analýzy a diagnostiky, které se budou dál podporovat až do 30. června 2026. Další informace.
App Center Crashes automaticky vygeneruje záznam o chybě pokaždé, když dojde k chybovému ukončení vaší aplikace, a uloží jej do úložiště zařízení. Když uživatel aplikaci znovu spustí, sada SDK odešle zprávu o chybovém ukončení do App Center. Shromažďování pádů funguje pro beta i živé aplikace, tedy pádů odeslaných do Google Play. Protokoly havárií obsahují cenné informace, které vám pomohou opravit havárie.
Pokud jste ještě nenastavili sadu SDK ve své aplikaci, postupujte podle pokynů v části Začínáme Unity .
Protokoly selhání v iOSu vyžadují symbolikaci. Pokud chcete symbolickou funkci povolit, přečtěte si dokumentaci k diagnostice App Center, která vysvětluje, jak pro vaši aplikaci poskytnout symboly.
Důležité
SDK pro detekci pádů Unity nepodporuje UWP. Pokyny na této stránce pokrývají pouze Android a iOS.
Poznámka:
Sada SDK nepředá žádné protokoly chybových ukončení, pokud jste připojili ladicí program. Ujistěte se, že ladicí program není připojený, když aplikace spadne.
Poznámka:
Pokud jste v Enable CrashReport API povolili, sada SDK neshromažďuje protokoly chybových ukončení.
Vyvolat testovací pád
App Center Crashes poskytuje rozhraní API pro vygenerování zkušebního pádu pro snadné testování SDK. Toto rozhraní API kontroluje konfigurace ladění a verzí. Proto ho můžete použít jenom při ladění, protože nebude fungovat pro aplikace vydaných verzí.
Crashes.GenerateTestCrash();
Poznámka:
Tato metoda bude fungovat pouze se zapnutým nastavením vývojového sestavení .
Získejte více informací o předchozím pádu
App Center crashes má dvě rozhraní API, která poskytují další informace pro případ, že dojde k chybovému ukončení vaší aplikace.
Obdržela aplikace v předchozí relaci upozornění na nedostatek paměti?
Kdykoli po spuštění sady SDK můžete zkontrolovat, jestli aplikace v předchozí relaci obdržela upozornění na paměť:
bool hadLowMemoryWarning = Crashes.HasReceivedMemoryWarningInLastSessionAsync().Result;
Poznámka:
Tato metoda nebude fungovat v Awake().
Poznámka:
V některých případech zařízení s nedostatkem paměti nemůže odesílat události.
Došlo k pádu aplikace v předchozí relaci?
Kdykoli po spuštění sady SDK můžete zkontrolovat, zda aplikace při předchozím spuštění havarovala.
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
Volání HasCrashedInLastSessionAsync je užitečné, pokud chcete upravit chování nebo uživatelské rozhraní aplikace po havárii. Někteří vývojáři zobrazují další prvky uživatelského rozhraní, aby se omluvili svým uživatelům, nebo se chtějí spojit po chybovém ukončení.
Podrobnosti o posledním pádu
Pokud se vaše aplikace dříve chybově ukončila, můžete získat podrobnosti o posledním chybovém ukončení.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Nejběžnějším případem použití tohoto rozhraní API je, když uživatel implementuje vlastního delegáta nebo posluchače Crashes.
Přizpůsobit používání funkce havárií v App Center
App Center Crashes poskytuje zpětná volání, která vývojářům umožňují provádět další akce před odesláním protokolů o pádech do App Center.
Poznámka:
Nastavte zpětné volání před spuštěním App Center, například v Awake metodě, protože App Center začne zpracovávat chybové ukončení hned po spuštění.
Měla by se havárie zpracovat?
Pokud se chcete rozhodnout, jestli se má konkrétní chyba zpracovat nebo ne, nastavte následující zpětné volání. Může se například stát, že dojde k chybovému ukončení na úrovni systému, které chcete ignorovat a neodesí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 selhání.
Pokud je pro vás ochrana osobních údajů 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. SDK poskytuje zpětné volání, které instruuje App Center Crashes, aby před odesláním jakýchkoli zpráv o chybách čekal na potvrzení uživatele.
Pokud váš kód používá toto zpětné volání, zodpovídáte za získání potvrzení uživatele. Jednou z možností je dialogové okno s jednou z následujících možností: Vždy odeslat, Odeslat a Neodesílat. Na základě vstupu určíte službě App Center Crashes, jak postupovat, a následně bude chyba zpracována odpovídajícím způsobem.
Poznámka:
Sada SDK pro toto dialogové okno nezobrazuje, aplikace musí poskytnout vlastní uživatelské rozhraní, aby požádala o souhlas uživatele.
Následující zpětné volání ukazuje, jak sadě SDK sdělit, 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;
};
Pokud zpětné volání vrátí true, musíte získat oprávnění uživatele a zaslat SDK výsledek pomocí následujícího 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);
Jako příklad můžete odkazovat na náš vlastní příklad dialogového okna.
Získejte informace o stavu odesílání protokolu o selhání
Někdy chcete zjistit stav pádu aplikace. Běžným případem použití je zobrazení uživatelského rozhraní, které informuje uživatele, že aplikace odesílá zprávu o chybovém ukončení. Dalším scénářem je situace, kdy chcete upravit chování aplikace, aby se zajistilo, že se protokoly chybových ukončení dají krátce po opětovném spuštění odeslat. App Center Crashes poskytuje tři různá zpětná volání, která můžete provést, aby vás informovala o dění.
Před odesláním chybového záznamu SDK se vyvolá následující zpětné volání.
Crashes.SendingErrorReport += (errorReport) =>
{
// Your code, e.g. to present a custom UI.
};
V případě problémů se sítí nebo výpadkem koncového bodu se po restartování procesu znovu aktivuje aplikace SendingErrorReport .
Následující zpětné volání se vyvolá po úspěšném odeslání protokolu chybových ukončení sady SDK.
Crashes.SentErrorReport += (errorReport) =>
{
// Your code, e.g. to hide the custom UI.
};
Pokud sadě SDK nebude úspěšné odeslat protokol pádu, následující zpětné volání se vyvolá.
Crashes.FailedToSendErrorReport += (errorReport, exception) =>
{
// Your code goes here.
};
Příjem FailedToSendErrorReport znamená, že došlo k neobnovitelné chybě, jako je kód 4xx . Například 401 znamená, že appSecret je nesprávná.
Toto zpětné volání se neaktivuje, pokud se jedná o problém se sítí. V tomto případě sada SDK pokračuje v opakování (a zároveň pozastaví opakování, zatímco síťové připojení je mimo provoz).
Přidat přílohy k hlášení o pádu nebo neošetřené chybě
Volitelně můžete také přidat binární a textové přílohy k hlášení o pádu nebo nevyřízené výjimce. SDK je pošle společně se zprávou, abyste je mohli vidět na portálu App Center. Následující callback bude vyvolán těsně před odesláním uložené zprávy. V případě pádu aplikace se řešení uskuteční při dalším spuštění aplikace. U neošetřených výjimek se musíte přihlásit k odesílání příloh. 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, jak připojit text a obrázek k sestavě:
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")
};
};
Pády jsou v sestavách odlišeny od neošetřených výjimek pomocí vlastnosti IsCrash. Vlastnost bude pravdivá pro chybové ukončení a neplatí jinak.
Poznámka:
Limit velikosti je pro přílohy aktuálně 7 MB. Při pokusu o odeslání větší přílohy dojde k chybě.
Poznámka:
GetErrorAttachments je vyvolána v hlavním vlákně a nedělí práci přes rámce. Abyste se vyhnuli blokování herní smyčky, neprovádějte v tomto zpětném volání žádné dlouhotrvající úkoly.
Povolení nebo zakázání pádů App Center při běhu
Za běhu můžete povolit a zakázat pády aplikace App Center. Pokud ji zakážete, sada SDK pro aplikaci neprovede žádné hlášení selhání.
Crashes.SetEnabledAsync(false);
Pokud chcete znovu povolit pády aplikace App Center, použijte stejné rozhraní API, ale předejte true jako parametr.
Crashes.SetEnabledAsync(true);
Toto volání nemusíte čekat, pokud chcete provádět další volání rozhraní API (například IsEnabledAsync) konzistentně.
Stav se zachová v úložišti zařízení napříč spuštěním aplikace.
Kontrola, jestli je povolené chybové ukončení App Center
Můžete také zkontrolovat, jestli je App Center Crashes zapnuté:
bool isEnabled = await Crashes.IsEnabledAsync();
Zpracované výjimky v Unity
App Center také umožňuje sledovat chyby pomocí zpracovaných výjimek v Unity. K tomu použijte metodu TrackError :
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Pro lepší pochopení chyby můžete k ní také připojit vlastnosti. Předejte vlastnosti jako slovník řetězců. Tento krok je volitelný.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On" }
};
Crashes.TrackError(exception, properties);
}
Do zpracovávané zprávy o chybách můžete také volitelně 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);
}
Neošetřené výjimky v Unity
Oznámit neošetřené výjimky
Sada App Center SDK ve výchozím nastavení nehlásí neošetřené výjimky vyvolané ve vaší aplikaci, které nezpůsobí závažnou chybu. Pokud chcete tuto funkci povolit, zavolejte následující metodu:
Crashes.ReportUnhandledExceptions(true);
Po volání tohoto rozhraní API App Center zaznamená všechny neošetřené výjimky jako problémy na portálu App Center, podobně jako dříve popsané výjimky. Pokud chcete tuto funkci zakázat, volejte stejné rozhraní API, které předává false parametr.
Crashes.ReportUnhandledExceptions(false);
Poznámka:
Některé neošetřené výjimky zjištěné sadou App Center SDK se v uživatelském rozhraní App Center zobrazí jako chyby. Důvodem je to, že Unity ve výchozím nastavení zachytává neošetřené výjimky, což znamená, že aplikace se neukončí a nepovažuje se za chybové ukončení.
Přidat přílohy k zprávě o neošetřené výjimce
Sada App Center SDK ve výchozím nastavení nepovoluje přílohy u neošetřených výjimek. Pokud chcete tuto funkci povolit, nastavte enableAttachmentsCallback logický parametr ReportUnhandledExceptions metody na true:
Crashes.ReportUnhandledExceptions(true, true);
Pak můžete volitelně přidat přílohy do neošetřené sestavy výjimek implementací zpětného volání GetErrorAttachments .
Hlášení pádů NDK
Hlášení pádů
Pokud chcete dostávat správné zprávy o chybách v App Center, nejprve se ujistěte, že máte sadu App Center Crashes SDK nastavenou podle výše uvedených pokynů.
Sestavení knihovny breakpadu
Dále musíte zahrnout a zkompilovat Google Breakpad podle pokynů uvedených v oficiální Google Breakpad pro Android README. Pokud ho chcete použít v Unity, zahrňte do své aplikace binární soubor.
Poznámka:
Sada App Center SDK ve výchozím nastavení nezahrnuje Google Breakpad.
Připojení obslužné rutiny výjimky
Jakmile budete mít vložený Google Breakpad, připojte obslužnou rutinu chybového ukončení sady NDK:
/* Attach NDK Crash Handler. */
var minidumpDir = Crashes.GetMinidumpDirectoryAsync();
setupNativeCrashesListener(minidumpDir.Result);
...
[DllImport("YourLib")]
private static extern void setupNativeCrashesListener(string path);
Metoda je nativní metoda setupNativeCrashesListener , kterou musíte implementovat v jazyce C/C++:
#include <android/log.h>
#include "google-breakpad/src/client/linux/handler/exception_handler.h"
#include "google-breakpad/src/client/linux/handler/minidump_descriptor.h"
static google_breakpad::ExceptionHandler exception_handler(google_breakpad::MinidumpDescriptor(), NULL, dumpCallback, NULL, true, -1);
/**
* Registers breakpad as the exception handler for NDK code.
* @param path minidump directory path returned from Crashes.GetMinidumpDirectoryAsync()
*/
extern "C" void setupNativeCrashesListener(const char *path) {
google_breakpad::MinidumpDescriptor descriptor(path);
exception_handler.set_minidump_descriptor(descriptor);
}
Kde dumpCallback se používá k řešení potíží:
/*
* Triggered automatically after an attempt to write a minidump file to the breakpad folder.
*/
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor,
void *context,
bool succeeded) {
/* Allow system to log the native stack trace. */
__android_log_print(ANDROID_LOG_INFO, "YourLogTag",
"Wrote breakpad minidump at %s succeeded=%d\n", descriptor.path(),
succeeded);
return false;
}
Jakmile jsou tyto metody správně nastavené, odešle aplikace minidump do App Center automaticky po restartování. Při řešení potíží můžete pomocí podrobných protokolů zkontrolovat, zda se po restartování aplikace odesílají minidumpy.
Poznámka:
App Center používá vyhrazený název minidump.dmp pro přílohy minidump. Pokud se nejedná o minidumpový soubor, nezapomeňte přílohu pojmenovat jinak, abychom ji mohli správně zpracovat.
Výstraha
V Breakpad je známá chyba, která znemožňuje zachycení pádů v emulátorech x86.
Symbolika
Další informace o zpracování pádů najdete v dokumentaci k diagnostice.