Auf dieser Seite finden Sie Hilfe bei der Fehlerbehebung und Antworten auf häufig gestellte Fragen zur Verwendung von Crashlytics. Wenn Sie nicht finden, wonach Sie suchen, oder weitere Hilfe benötigen, wenden Sie sich an den Firebase-Support.
Allgemeine Fehlerbehebung/FAQ
In der Tabelle Probleme werden für einige Probleme unterschiedliche Formate (und manchmal auch „Varianten“) angezeigt.
In der Tabelle Probleme in der Firebase-Konsole werden Probleme möglicherweise in zwei verschiedenen Formaten aufgeführt. Möglicherweise sehen Sie bei einigen Problemen auch eine Funktion namens „Varianten“. Hier erfährst du, warum.
Anfang 2023 haben wir eine verbesserte Analyse-Engine zum Gruppieren von Ereignissen sowie ein aktualisiertes Design und einige erweiterte Funktionen für neue Probleme (z. B. Varianten) eingeführt. In unserem aktuellen Blogpost findest du alle Details. Die wichtigsten Informationen haben wir unten für dich zusammengefasst.
Crashlytics analysiert alle Ereignisse aus Ihrer App (z. B. Abstürze, nicht schwerwiegende Fehler und ANRs) und erstellt Gruppen von Ereignissen, die als Probleme bezeichnet werden. Alle Ereignisse in einem Problem haben einen gemeinsamen Point of Failure.
Um Ereignisse in diese Probleme zu gruppieren, werden von der verbesserten Analyse-Engine jetzt viele Aspekte des Ereignisses berücksichtigt, darunter die Frames im Stacktrace, die Ausnahmemeldung, der Fehlercode und andere Plattform- oder Fehlertypmerkmale.
Innerhalb dieser Gruppe von Ereignissen können sich die Stacktraces, die zu dem Fehler führen, jedoch unterscheiden. Ein anderer Stacktrace kann auf eine andere Ursache hindeuten. Um diesen möglichen Unterschied innerhalb eines Problems darzustellen, erstellen wir jetzt Varianten innerhalb von Problemen. Jede Variante ist eine Untergruppe von Ereignissen in einem Problem, die denselben Point of Failure und einen ähnlichen Stacktrace haben. Mit Varianten können Sie Fehler in den häufigsten Stacktraces eines Problems beheben und feststellen, ob der Fehler verschiedene Ursachen hat.
Das sind die Vorteile der Verbesserungen:
Überarbeitete Metadaten in der Problemzeile
Probleme in Ihrer App lassen sich jetzt leichter nachvollziehen und priorisieren.Weniger doppelte Probleme
Eine Änderung der Zeilennummer führt nicht zu einem neuen Problem.Einfachere Fehlerbehebung bei komplexen Problemen mit verschiedenen Ursachen
Mit Varianten können Sie Fehler in den häufigsten Stacktraces eines Problems beheben.Aussagekräftigere Benachrichtigungen und Signale
Ein neues Problem ist tatsächlich ein neuer Fehler.Leistungsstärkere Suche
Jedes Problem enthält mehr durchsuchbare Metadaten, z. B. Ausnahmetyp und Paketname.
So werden diese Verbesserungen eingeführt:
Wenn wir neue Ereignisse von Ihrer App erhalten, prüfen wir, ob sie mit einem bestehenden Problem übereinstimmen.
Wenn keine Übereinstimmung gefunden wird, wenden wir automatisch unseren optimierten Algorithmus zur Ereignisgruppierung auf das Ereignis an und erstellen ein neues Problem mit dem überarbeiteten Metadatendesign.
Dies ist das erste große Update, das wir an der Gruppierung von Ereignissen vornehmen. Wenn Sie Feedback haben oder Probleme auftreten, melden Sie uns dies bitte .
Navigationspfad-Logs werden nicht angezeigt
Wenn Sie keine Breadcrumb-Logs sehen (iOS+ | Android | Flutter | Unity), empfehlen wir, die Konfiguration Ihrer App für Google Analytics zu prüfen. Sie müssen die folgenden Anforderungen erfüllen:
Sie haben Google Analytics in Ihrem Firebase-Projekt aktiviert.
Sie haben die Datenfreigabe für Google Analytics aktiviert. Weitere Informationen zu dieser Einstellung
Sie haben das Firebase SDK für Google Analytics in Ihre App eingebunden: iOS+ | Android | Flutter | Unity.
Dieses SDK muss zusätzlich zum Crashlytics SDK hinzugefügt werden.Sie verwenden die aktuellen Firebase SDK-Versionen für alle Produkte, die Sie in Ihrer App verwenden (iOS+ | Android | Flutter | Unity).
Prüfen Sie bei Apple-Plattformen und Android-Apps, ob Sie mindestens die folgende Version des Firebase SDK für Google Analytics verwenden:
iOS+ – v6.3.1+ (v8.9.0+ für macOS und tvOS) |Android – v17.2.3+ (BoM v24.7.1+) .
Keine Geschwindigkeitswarnungen
Wenn Sie keine Geschwindigkeitswarnungen sehen, achten Sie darauf, dass Sie die folgenden SDK-Versionen verwenden:
Messwerte ohne Abstürze werden nicht angezeigt oder sind unzuverlässig
Wenn Sie keine Messwerte zu Abstürzen sehen (z. B. Nutzer ohne Abstürze und Sitzungen ohne Abstürze) oder die Messwerte unzuverlässig sind, prüfen Sie Folgendes:
Achten Sie darauf, dass Sie das
Prüfen Sie, ob die Einstellungen für die Datenerhebung die Qualität Ihrer Messwerte zu Nutzern ohne Abstürze beeinträchtigen:
Wenn Sie die Berichterstellung mit Einwilligung aktivieren, indem Sie die automatische Absturzberichterstellung deaktivieren, können Absturzinformationen nur von Nutzern an Crashlytics gesendet werden, die der Datenerhebung ausdrücklich zugestimmt haben. Daher wird die Genauigkeit der Messwerte ohne Abstürze beeinträchtigt, weil Crashlytics nur Absturzinformationen von diesen Nutzern mit Einwilligung (und nicht von allen Nutzern) enthält. Das bedeutet, dass Ihre Messwerte zu Nutzern ohne Abstürze möglicherweise weniger zuverlässig sind und die Gesamtstabilität Ihrer App weniger genau widerspiegeln.
Wenn die automatische Datenerhebung deaktiviert ist, können Sie mit
sendUnsentReportsBerichte, die auf dem Gerät zwischengespeichert wurden, an Crashlytics senden. Wenn Sie diese Methode verwenden, werden Absturzdaten an Crashlytics gesendet, aber keine Sitzungsdaten. Daher werden in den Konsolendiagrammen niedrige oder keine Werte für absturzfreie Messwerte angezeigt.
Wie wird der Anteil der nicht von einem Absturz betroffenen Nutzer berechnet?
Wer kann Anmerkungen zu einem Problem ansehen, verfassen und löschen?
Mit Notizen können Projektmitglieder bestimmte Probleme kommentieren, z. B. mit Fragen oder Statusupdates.
Wenn ein Projektmitglied eine Anmerkung postet, wird sie mit der E‑Mail-Adresse seines Google-Kontos gekennzeichnet. Diese E-Mail-Adresse ist zusammen mit der Notiz für alle Projektmitglieder sichtbar, die Zugriff auf die Notiz haben.
Im Folgenden wird der Zugriff beschrieben, der zum Ansehen, Schreiben und Löschen von Notizen erforderlich ist:
Projektmitglieder mit einer der folgenden Rollen können vorhandene Notizen zu einem Problem ansehen und löschen sowie neue Notizen schreiben.
Projektmitglieder mit einer der folgenden Rollen können die zu einem Problem geposteten Notizen ansehen, aber keine Notizen löschen oder schreiben.
- Projekt-Betrachter, Firebase-Betrachter, Qualitätsbetrachter oder Crashlytics-Betrachter
Was ist ein Problem, das sich verschlechtert hat?
Ein Problem ist zurückgekehrt, wenn Sie es zuvor geschlossen haben, aber Crashlytics einen neuen Bericht erhält, dass es wieder aufgetreten ist. Crashlytics öffnet diese zurückgegangenen Probleme automatisch wieder, damit Sie sie für Ihre App beheben können.
Hier ist ein Beispiel dafür, wie Crashlytics ein Problem als Regression kategorisiert:
- Crashlytics erhält zum ersten Mal einen Absturzbericht zu „Crash A“. Crashlytics öffnet ein entsprechendes Problem für diesen Absturz (Problem A).
- Sie beheben diesen Fehler schnell, schließen Problem A und veröffentlichen dann eine neue Version Ihrer App.
- Crashlytics erhält einen weiteren Bericht zu Problem „A“, nachdem Sie das Problem geschlossen haben.
- Wenn der Bericht von einer App-Version stammt, die Crashlytics bekannt war, als Sie das Problem geschlossen haben (d. h. die Version hatte einen Absturzbericht für jeden Absturz gesendet), wird das Problem von Crashlytics nicht als Regression betrachtet. Das Problem bleibt geschlossen.
- Wenn der Bericht von einer App-Version stammt, die Crashlytics nicht kannte, als Sie das Problem geschlossen haben (d. h., die Version hatte nie einen Absturzbericht für einen Absturz gesendet), betrachtet Crashlytics das Problem als Regression und öffnet es wieder.
Wenn ein Problem wieder auftritt, senden wir eine Benachrichtigung zur Regressionserkennung und fügen dem Problem ein Regressionssignal hinzu, um Sie darüber zu informieren, dass Crashlytics das Problem wieder geöffnet hat. Wenn Sie nicht möchten, dass ein Problem aufgrund unseres Regressionsalgorithmus wieder geöffnet wird, sollten Sie es stummschalten, anstatt es zu schließen.
Warum sehe ich Probleme in älteren App-Versionen?
Wenn ein Bericht von einer alten App-Version stammt, für die beim Schließen des Problems noch keine Absturzberichte gesendet wurden, betrachtet Crashlytics das Problem als Regression und öffnet es wieder.
Das kann passieren, wenn Sie einen Fehler behoben und eine neue Version Ihrer App veröffentlicht haben, aber Nutzer noch ältere Versionen ohne die Fehlerkorrektur verwenden. Wenn in einer dieser früheren Versionen nie Absturzberichte gesendet wurden, als Sie das Problem geschlossen haben, und diese Nutzer auf den Fehler stoßen, lösen diese Absturzberichte ein zurückgegangenes Problem aus.
Wenn Sie nicht möchten, dass ein Problem aufgrund unseres Regressionsalgorithmus wieder geöffnet wird, sollten Sie es stummschalten, anstatt es zu schließen.
Die App verwendet auch das Google Mobile Ads-SDK, es treten aber keine Abstürze auf
Wenn in Ihrem Projekt Crashlytics zusammen mit dem Google Mobile Ads SDK verwendet wird, stören sich die Absturzberichte wahrscheinlich beim Registrieren von Ausnahmebehandlern. Um das Problem zu beheben, deaktivieren Sie die Absturzberichterstattung im Mobile Ads SDK, indem Sie disableSDKCrashReporting aufrufen.
Wo befindet sich mein BigQuery-Dataset?
Nachdem Sie Crashlytics mit BigQuery verknüpft haben, werden neue Datasets, die Sie erstellen, automatisch in den USA gespeichert, unabhängig vom Standort Ihres Firebase-Projekts.
Plattformspezifischer Support
In den folgenden Abschnitten finden Sie plattformspezifische Informationen zur Fehlerbehebung und häufig gestellte Fragen: iOS+ | Android | Unity.
Unterstützung von Apple-Plattformen
dSYMs fehlen oder werden nicht hochgeladen
Wenn Sie die dSYMs Ihres Projekts hochladen und eine ausführliche Ausgabe erhalten möchten, prüfen Sie Folgendes:
Achten Sie darauf, dass die Build-Phase Ihres Projekts das Crashlytics-Ausführungsskript enthält. Dadurch kann Xcode die dSYMs Ihres Projekts während des Builds hochladen. Eine Anleitung zum Hinzufügen des Skripts finden Sie unter Crashlytics initialisieren. Nachdem Sie Ihr Projekt aktualisiert haben, erzwingen Sie einen Absturz und prüfen Sie, ob der Absturz im Crashlytics-Dashboard angezeigt wird.
Wenn in der Firebase-Konsole die Meldung „dSYM fehlt“ angezeigt wird, prüfen Sie in Xcode, ob dSYMs für den Build richtig erstellt werden.
Wenn Xcode dSYMs ordnungsgemäß erstellt und Sie trotzdem fehlende dSYMs sehen, bleibt das Run-Script-Tool wahrscheinlich beim Hochladen der dSYMs hängen. Versuchen Sie in diesem Fall Folgendes:
Achten Sie darauf, dass Sie die neueste Version von Crashlytics verwenden.
Laden Sie die fehlenden dSYM-Dateien manuell hoch:
- Option 1:Verwenden Sie die konsolenbasierte Drag-and-drop-Option auf dem Tab dSYMs, um ein ZIP-Archiv mit den fehlenden dSYM-Dateien hochzuladen.
- Option 2:Verwenden Sie das
upload-symbols-Skript, um die fehlenden dSYM-Dateien für die angegebenen UUIDs auf dem Tab dSYMs hochzuladen.
Wenn weiterhin dSYMs fehlen oder Uploads weiterhin fehlschlagen, wenden Sie sich an den Firebase-Support und fügen Sie Ihre Logs bei.
Abstürze sind schlecht symbolisiert
Wenn Ihre Stacktraces schlecht symbolisiert zu sein scheinen, prüfen Sie Folgendes:
Wenn Frames aus der Bibliothek Ihrer App keine Verweise auf den Code Ihrer App enthalten, prüfen Sie, ob
als Kompilierungsflag festgelegt ist.-fomit-frame-pointerWenn Sie mehrere
(Missing)-Frames für die Bibliothek Ihrer App sehen, prüfen Sie, ob auf dem Tab Crashlytics dSYMs der Firebase-Konsole optionale dSYMs als fehlend aufgeführt sind (für die betroffene App-Version). Wenn ja, folgen Sie dem Schritt zur Fehlerbehebung „Fehlende dSYM-Warnung“ in den FAQs zu fehlenden/nicht hochgeladenen dSYMs auf dieser Seite. Durch das Hochladen dieser dSYMs werden keine Abstürze symbolisiert, die bereits aufgetreten sind. Es wird jedoch sichergestellt, dass künftige Abstürze symbolisiert werden.
Kann ich Crashlytics für macOS oder tvOS verwenden?
Ja, Sie können Crashlytics in macOS- und tvOS-Projekten implementieren. Achten Sie darauf, dass Sie Version 8.9.0 oder höher des Firebase SDK für Google Analytics einbinden, damit für Abstürze auf Messwerte zugegriffen werden kann, die von Google Analytics erfasst werden (nutzerfrei von Abstürzen, letzte Version, Geschwindigkeitswarnungen und Breadcrumb-Logs).
Kann ich Crashlytics in einem Firebase-Projekt mit mehreren Apps auf verschiedenen Apple-Plattformen verwenden?
Sie können jetzt Abstürze für mehrere Apps in einem einzigen Firebase-Projekt melden, auch wenn die Apps für verschiedene Apple-Plattformen (z. B. iOS, tvOS und Mac Catalyst) entwickelt wurden. Bisher mussten Sie die Apps in separate Firebase-Projekte aufteilen, wenn sie dieselbe Bundle-ID enthielten.
Android-Support
Warum werden ANR-Fehler nur für Android 11+ gemeldet?
Crashlytics unterstützt ANR-Berichte für Android-Apps von Geräten mit Android 11 und höher. Die zugrunde liegende API, die wir zum Erfassen von ANRs verwenden (getHistoricalProcessExitReasons), ist zuverlässiger als Ansätze, die auf SIGQUIT oder Watchdog basieren. Diese API ist nur auf Geräten mit Android 11 und höher verfügbar.
Warum fehlt bei einigen ANRs die BuildId?
Wenn bei einigen Ihrer ANRs die BuildId fehlen, gehen Sie so vor:
Achten Sie darauf, dass Sie eine aktuelle Version des Crashlytics Android SDK und des Crashlytics Gradle-Plug-ins verwenden.
Wenn Sie
BuildIdfür Android 11 und einige ANR-Fehler unter Android 12 nicht sehen, verwenden Sie wahrscheinlich ein veraltetes SDK, ein veraltetes Gradle-Plug-in oder beides. DamitBuildIds für diese ANRs richtig erfasst werden, müssen Sie die folgenden Versionen verwenden:- Crashlytics Android SDK v18.3.5+ (Firebase BoM v31.2.2+)
- Crashlytics Gradle-Plug-in v2.9.4 oder höher
Prüfen Sie, ob Sie einen nicht standardmäßigen Speicherort für Ihre gemeinsam genutzten Bibliotheken verwenden.
Wenn nur
BuildIdfür die gemeinsam genutzten Bibliotheken Ihrer App fehlen, verwenden Sie wahrscheinlich nicht den standardmäßigen Standardspeicherort für gemeinsam genutzte Bibliotheken. In diesem Fall kann Crashlytics die zugehörigenBuildIdmöglicherweise nicht finden. Wir empfehlen, den Standardspeicherort für freigegebene Bibliotheken zu verwenden.Achten Sie darauf, dass Sie während des Build-Prozesses keine
BuildIds entfernen.Die folgenden Tipps zur Fehlerbehebung gelten sowohl für ANR-Fehler als auch für native Abstürze.
Prüfen Sie, ob die
BuildIds vorhanden sind, indem Siereadelf -nfür Ihre Binärdateien ausführen. Wenn dieBuildIdfehlen, fügen Sie-Wl,--build-idden Flags für Ihr Build-System hinzu.Prüfen Sie, ob Sie die
BuildIdnicht versehentlich entfernen, um die APK-Größe zu verringern.Wenn Sie sowohl die gestrippte als auch die nicht gestrippte Version einer Bibliothek verwenden, müssen Sie in Ihrem Code auf die richtige Version verweisen.
Unterschiede zwischen ANR-Berichten im Crashlytics-Dashboard und in der Google Play Console
Die Anzahl der ANRs kann zwischen Google Play und Crashlytics abweichen. Das ist aufgrund des Unterschieds beim Erfassen und Melden von ANR-Daten zu erwarten. Crashlytics meldet ANRs, wenn die App das nächste Mal gestartet wird. Android Vitals sendet ANR-Daten, nachdem der ANR aufgetreten ist.
Außerdem werden in Crashlytics nur ANR-Fehler angezeigt, die auf Geräten mit Android 11 oder höher auftreten. In Google Play werden dagegen ANR-Fehler von Geräten angezeigt, auf denen die Google Play-Dienste installiert sind und die Einwilligung zur Datenerhebung erteilt wurde.
Warum werden Abstürze aus .kt-Dateien als .java-Probleme gekennzeichnet?
Wenn eine App einen Obfuskator verwendet, der die Dateiendung nicht offenlegt, generiert Crashlytics jedes Problem standardmäßig mit der Dateiendung .java.
Damit Crashlytics Probleme mit der richtigen Dateiendung generieren kann, muss Ihre App so eingerichtet sein:
- Android Gradle 4.2.0 oder höher wird verwendet.
- Verwendet R8 mit aktivierter Verschleierung. Hier finden Sie eine Anleitung, wie Sie Ihre App auf R8 aktualisieren.
Nach dem Update auf die oben beschriebene Einrichtung werden möglicherweise neue .kt-Probleme angezeigt, die Duplikate vorhandener .java-Probleme sind. Weitere Informationen finden Sie in den FAQs.
Warum sehe ich .kt-Probleme, die Duplikate von vorhandenen .java-Problemen sind?
Seit Mitte Dezember 2021 bietet Crashlytics eine verbesserte Unterstützung für Anwendungen, die Kotlin verwenden.
Bis vor Kurzem wurde die Dateiendung von den verfügbaren Obfuskierungsfunktionen nicht offengelegt. Daher wurde jedes Problem in Crashlytics standardmäßig mit der Dateiendung .java generiert.
Ab Android Gradle 4.2.0 unterstützt R8 jedoch Dateiendungen.
Mit diesem Update kann Crashlytics jetzt ermitteln, ob jede in der App verwendete Klasse in Kotlin geschrieben ist, und den richtigen Dateinamen in die Problemsignatur aufnehmen. Abstürze werden jetzt korrekt .kt-Dateien zugeordnet (falls zutreffend), wenn Ihre App die folgende Einrichtung hat:
- In Ihrer App wird Android Gradle 4.2.0 oder höher verwendet.
- In Ihrer App wird R8 mit aktivierter Verschleierung verwendet.
Da neue Abstürze jetzt die richtige Dateiendung in ihren Problemsignaturen enthalten, werden möglicherweise neue .kt-Probleme angezeigt, die eigentlich nur Duplikate von vorhandenen Problemen mit dem Label .java sind. In der Firebase-Konsole versuchen wir, neue .kt-Probleme zu erkennen und Sie darüber zu informieren, wenn sie möglicherweise Duplikate eines vorhandenen Problems mit dem Label .java sind.
Keine Abstürze mit Dexguard
Wenn Sie die folgende Ausnahme sehen, verwenden Sie wahrscheinlich eine Version von DexGuard, die nicht mit dem Firebase Crashlytics SDK kompatibel ist:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
Diese Ausnahme führt nicht zum Absturz Ihrer App, verhindert aber, dass Absturzberichte gesendet werden. So lösen Sie das Problem:
Achten Sie darauf, dass Sie die aktuelle Version von DexGuard 8.x verwenden. Die neueste Version enthält Regeln, die für das Firebase Crashlytics SDK erforderlich sind.
Wenn Sie Ihre DexGuard-Version nicht ändern möchten, fügen Sie den folgenden Code in Ihre Verschleierungsregeln (in Ihrer DexGuard-Konfigurationsdatei) ein:
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
Android-NDK-spezifischer Support
Unterschiede zwischen NDK-Stacktraces im Crashlytics-Dashboard und in logcat
LLVM- und GNU-Toolchains haben unterschiedliche Standardeinstellungen und Verarbeitungen für das schreibgeschützte Segment der Binärdateien Ihrer App, was zu inkonsistenten Stacktraces in der Firebase-Konsole führen kann. Um dieses Problem zu beheben, fügen Sie Ihrem Build-Prozess die folgenden Linker-Flags hinzu:
Wenn Sie den
lld-Linker aus der LLVM-Toolchain verwenden, fügen Sie Folgendes hinzu:-Wl,--no-rosegmentWenn Sie den
ld.gold-Linker aus der GNU-Toolchain verwenden, fügen Sie Folgendes hinzu:-Wl,--rosegment
Wenn weiterhin Inkonsistenzen im Stacktrace auftreten oder keiner der beiden Flags für Ihre Toolchain relevant ist, fügen Sie stattdessen Folgendes in Ihren Build-Prozess ein:
-fno-omit-frame-pointerWie verwende ich meine eigene Binärdatei für den Breakpad-Symboldateigenerator für das NDK?
Das Crashlytics-Plug-in enthält einen angepassten Breakpad-Symboldateigenerator.
Wenn Sie lieber Ihr eigenes Binärprogramm zum Generieren von Breakpad-Symboldateien verwenden möchten (z. B. wenn Sie alle nativen ausführbaren Dateien in Ihrem Build-Prozess lieber aus dem Quellcode erstellen), können Sie mit der optionalen Erweiterungseigenschaft symbolGeneratorBinary den Pfad zur ausführbaren Datei angeben.
Sie können den Pfad zur Binärdatei des Breakpad-Symboldateigenerators auf zwei Arten angeben:
Option 1: Pfad über die Erweiterung
firebaseCrashlyticsin der Dateibuild.gradleangebenFügen Sie der Datei
build.gradle.ktsauf App-Ebene Folgendes hinzu:Gradle-Plug-in v3.0.0 oder höher
android { buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true // Add these optional fields to specify the path to the executable symbolGeneratorType = "breakpad" breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } }
niedrigere Plug-in-Versionen
android { // ... buildTypes { // ... release { // ... firebaseCrashlytics { // existing; required for either symbol file generator nativeSymbolUploadEnabled true // Add this optional new block to specify the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
Option 2: Pfad über eine Eigenschaftszeile in der Datei „gradle.properties“ angeben
Mit der Eigenschaft
com.google.firebase.crashlytics.breakpadBinarykönnen Sie den Pfad zur ausführbaren Datei angeben.Sie können die Gradle-Eigenschaftendatei manuell oder über die Befehlszeile aktualisieren. Wenn Sie den Pfad beispielsweise über die Befehlszeile angeben möchten, verwenden Sie einen Befehl wie den folgenden:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
Wird armeabi von Crashlytics unterstützt?
Das Firebase Crashlytics NDK unterstützt ARMv5 (armeabi) nicht. Die Unterstützung für dieses ABI wurde mit NDK r17 entfernt.
Unity-Unterstützung
Unsichtbare Stacktraces für Android-Apps im Crashlytics-Dashboard
Wenn Sie IL2CPP von Unity verwenden und unsymbolisierte Stacktraces sehen, gehen Sie so vor:
Achten Sie darauf, dass Sie Version 8.6.1 oder höher des Crashlytics Unity SDK verwenden.
Achten Sie darauf, dass Sie die Firebase-Befehlszeile eingerichtet haben und den
crashlytics:symbols:upload-Befehl ausführen, um die Symboldatei zu generieren und hochzuladen.Sie müssen diesen CLI-Befehl jedes Mal ausführen, wenn Sie einen Release-Build oder einen anderen Build erstellen, für den Sie symbolisierte Stacktraces in der Firebase-Konsole sehen möchten. Weitere Informationen
Kann Crashlytics mit Apps verwendet werden, die IL2CPP verwenden?
Ja, Crashlytics kann symbolisierte Stacks für Ihre Apps anzeigen, die IL2CPP verwenden. Diese Funktion ist für Apps verfügbar, die auf Android- oder Apple-Plattformen veröffentlicht wurden. So gehts:
Achten Sie darauf, dass Sie Version 8.6.0 oder höher des Crashlytics Unity SDK verwenden.
Führen Sie die erforderlichen Aufgaben für Ihre Plattform aus:
Apps für Apple-Plattformen: Es sind keine besonderen Maßnahmen erforderlich. Bei Apps für Apple-Plattformen konfiguriert das Firebase Unity Editor-Plug-in Ihr Xcode-Projekt automatisch für das Hochladen von Symbolen.
Für Android-Apps: Achten Sie darauf, dass Sie die Firebase-Befehlszeile eingerichtet haben und den
crashlytics:symbols:upload-Befehl ausführen, um Ihre Symboldatei zu generieren und hochzuladen.Sie müssen diesen CLI-Befehl jedes Mal ausführen, wenn Sie einen Release-Build oder einen anderen Build erstellen, für den Sie symbolisierte Stacktraces in der Firebase-Konsole sehen möchten. Weitere Informationen
Nicht abgefangene Ausnahmen als schwerwiegende Fehler melden
Crashlytics kann nicht erfasste Ausnahmen als schwerwiegend melden (ab Version 10.4.0 des Unity SDK). In den folgenden FAQs werden die Gründe für die Verwendung dieses Features und die Best Practices erläutert.
Warum sollten nicht erfasste Ausnahmen in einer App als schwerwiegende Fehler gemeldet werden?
Wenn Sie nicht abgefangene Ausnahmen als schwerwiegend melden, erhalten Sie einen realistischeren Hinweis darauf, welche Ausnahmen dazu führen können, dass das Spiel nicht mehr spielbar ist – auch wenn die App weiterhin ausgeführt wird.
Wenn Sie mit dem Melden von schwerwiegenden Fehlern beginnen, sinkt der Prozentsatz der Nutzer ohne Abstürze wahrscheinlich. Der Messwert „Nutzer ohne Abstürze“ ist dann aber repräsentativer für die Erfahrungen der Endnutzer mit Ihrer App.
Welche Ausnahmen werden als schwerwiegend gemeldet?
Damit Crashlytics eine nicht abgefangene Ausnahme als schwerwiegend meldet, müssen beide der folgenden Bedingungen erfüllt sein:
Bei der Initialisierung in Ihrer App muss die
ReportUncaughtExceptionsAsFatal-Property auftruefestgelegt werden.Ihre App (oder eine enthaltene Bibliothek) löst eine Ausnahme aus, die nicht abgefangen wird. Eine Ausnahme, die erstellt, aber nicht ausgelöst wird, gilt nicht als nicht abgefangen.
Nachdem ich das Melden nicht abgefangener Ausnahmen als schwerwiegende Fehler aktiviert habe, erhalte ich jetzt viele neue schwerwiegende Fehler. Wie gehe ich richtig mit diesen Ausnahmen um?
Wenn Sie Berichte zu Ihren nicht abgefangenen Ausnahmen als schwerwiegend erhalten, haben Sie folgende Möglichkeiten, diese nicht abgefangenen Ausnahmen zu behandeln:
- Überlegen Sie, wie Sie diese nicht abgefangenen Ausnahmen abfangen und verarbeiten können.
- Erwägen Sie verschiedene Optionen zum Protokollieren von Ausnahmen in der Unity-Debugkonsole und in Crashlytics.
Ausnahmen abfangen und behandeln
Ausnahmen werden erstellt und ausgelöst, um unerwartete oder außergewöhnliche Zustände zu berücksichtigen. Um die Probleme zu beheben, die durch eine ausgelöste Ausnahme angezeigt werden, muss das Programm in einen bekannten Zustand zurückversetzt werden. Dieser Vorgang wird als Ausnahmebehandlung bezeichnet.
Es wird empfohlen, alle vorhersehbaren Ausnahmen abzufangen und zu verarbeiten, sofern das Programm nicht in einen bekannten Zustand zurückgesetzt werden kann.
Um zu steuern, welche Arten von Ausnahmen von welchem Code abgefangen und verarbeitet werden, schließen Sie Code, der möglicherweise eine Ausnahme generiert, in einen try-catch-Block ein.
Achten Sie darauf, dass die Bedingungen in den catch-Anweisungen so eng wie möglich gefasst sind, damit die spezifischen Ausnahmen angemessen behandelt werden.
Ausnahmen in Unity oder Crashlytics protokollieren
Es gibt mehrere Möglichkeiten, Ausnahmen in Unity oder Crashlytics aufzuzeichnen, um das Problem zu beheben.
Wenn Sie Crashlytics verwenden, sind die beiden folgenden Optionen am häufigsten und werden empfohlen:
Option 1: In der Unity-Konsole ausgeben, aber während der Entwicklung oder Fehlerbehebung nicht an Crashlytics senden
- Geben Sie mit
Debug.Log(exception),Debug.LogWarning(exception)undDebug.LogError(exception)in die Unity-Konsole aus. Dabei wird der Inhalt der Ausnahme in die Unity-Konsole ausgegeben und die Ausnahme wird nicht noch einmal ausgelöst.
- Geben Sie mit
Option 2: In den folgenden Situationen in Crashlytics hochladen, um konsolidierte Berichte im Crashlytics-Dashboard zu erhalten:
- Wenn eine Ausnahme protokolliert werden soll, um ein mögliches nachfolgendes Crashlytics-Ereignis zu debuggen, verwenden Sie
Crashlytics.Log(exception.ToString()). - Wenn eine Ausnahme trotz des Abfangens und der Verarbeitung weiterhin an Crashlytics gemeldet werden soll, verwenden Sie
Crashlytics.LogException(exception), um sie als nicht schwerwiegendes Ereignis zu protokollieren.
- Wenn eine Ausnahme protokolliert werden soll, um ein mögliches nachfolgendes Crashlytics-Ereignis zu debuggen, verwenden Sie
Wenn Sie jedoch ein schwerwiegendes Ereignis manuell an Unity Cloud Diagnostics melden möchten, können Sie Debug.LogException verwenden. Bei dieser Option wird die Ausnahme wie bei Option 1 in der Unity-Konsole ausgegeben, sie wird aber auch ausgelöst, unabhängig davon, ob sie bereits ausgelöst oder abgefangen wurde. Der Fehler wird nicht lokal ausgegeben. Das bedeutet, dass auch ein umgebender Debug.LogException(exception)-Block mit try-catch-Blöcken zu einer nicht abgefangenen Ausnahme führt.
Rufen Sie Debug.LogException daher nur auf, wenn Sie alle der folgenden Aktionen ausführen möchten:
- Gibt die Ausnahme in der Unity-Konsole aus.
- Die Ausnahme wird als schwerwiegendes Ereignis in Crashlytics hochgeladen.
- Die Ausnahme wird ausgelöst, als nicht erfasste Ausnahme behandelt und an Unity Cloud Diagnostics gemeldet.
Wenn Sie eine abgefangene Ausnahme in der Unity-Konsole ausgeben und als nicht schwerwiegendes Ereignis in Crashlytics hochladen möchten, gehen Sie so vor:
try
{
methodThatThrowsMyCustomExceptionType();
}
catch(MyCustomExceptionType exception)
{
// Print the exception to the Unity console at the error level.
Debug.LogError(exception);
// Upload the exception to Crashlytics as a non-fatal event.
Crashlytics.LogException(exception); // not Debug.LogException
//
// Code that handles the exception
//
}