Table of Contents
Erste Schritte mit React Native Debugging
React Native ist zu einem der am weitesten verbreiteten Frameworks für die Erstellung plattformübergreifender mobiler Anwendungen geworden, indem JavaScript und React genutzt werden, um native Erlebnisse zu liefern. Debugging ist eine Kernkompetenz, die sich direkt auf die Entwicklungsgeschwindigkeit und App-Qualität auswirkt. Ob Sie ein Neuling oder ein erfahrener Entwickler sind, das Verständnis des in React Native verfügbaren Debugging-Ökosystems wird Ihnen helfen, Probleme schneller zu identifizieren, die Zeit für die Reproduktion von Fehlern zu reduzieren und zuverlässigeren Code zu liefern. Dieser Artikel bietet eine ausführliche Durchsicht der wesentlichen Debugging-Tools und -Techniken, von den integrierten Chrome Developer Tools bis hin zu fortschrittlichen Plattformen wie Flipper und React Native Debugger.
Bevor Sie sich mit bestimmten Tools befassen, hilft es, Ihre Entwicklungsumgebung für ein optimales Debugging zu konfigurieren. Stellen Sie sicher, dass Sie die neueste Version von React Native installiert haben, da neuere Versionen oft Debugging-Verbesserungen und veraltete Methoden enthalten. Für iOS kann die Verwendung eines tatsächlichen Geräts mit USB-Anschluss Probleme aufdecken, die Simulatoren verdunkeln, während der Android-Emulator durch ADB-Logging umfangreiche Debugging-Funktionen bietet. Machen Sie sich mit dem React Native Developer-Menü vertraut, das durch Schütteln eines physischen Geräts oder Drücken von Cmd + D (iOS-Simulator) oder Cmd + M (Android-Emulator) zugänglich ist. Dieses Menü ist das Tor zu den meisten Debugging-Optionen.
Chrome Developer Tools: Das klassische Debugging Workhorse
Die Chrome Developer Tools (DevTools) sind seit den Anfängen des Frameworks ein Grundnahrungsmittel beim React Native Debugging. Wenn Sie das Debuggen aus dem Entwicklermenü aktivieren, läuft der JavaScript-Code der App in Chrome, so dass Sie die gesamte Suite der DevTools-Funktionen nutzen können. Diese Methode funktioniert, indem Sie eine WebSocket-Verbindung zwischen der React Native App und Chrome herstellen, so dass Sie Elemente inspizieren, Haltepunkte festlegen, Netzwerkanforderungen überwachen und JavaScript in Echtzeit debuggen können.
Chrome DevTools in React Native aktivieren
So starten Sie das Debuggen mit Chrome DevTools:
- Öffnen Sie Ihre React Native App auf einem Emulator oder physischen Gerät.
- Öffnen Sie das Entwicklermenü, indem Sie das Gerät schütteln oder Cmd+D (iOS) / Cmd+M (Android) drücken.
- Wählen Sie „Debug“ (oder „Debug JS Remotely“ in älteren Versionen). Ein neuer Chrome-Tab wird mit der DevTools-Schnittstelle geöffnet.
- Drücken Sie in Chrome Cmd+Option+I (Mac) oder Ctrl+Shift+I (Windows/Linux), um DevTools zu öffnen, wenn es nicht automatisch angezeigt wird.
Sobald Sie verbunden sind, können Sie die folgenden Panels effektiv verwenden:
- Elemente: Obwohl nicht so reichhaltig wie native Inspektor-Tools, zeigt das Elements-Panel einen vereinfachten DOM-Baum Ihrer React Native-Ansichten an.
- Konsole: Logs von , und anzeigen.
- Quellen: Setzen Sie Haltepunkte, gehen Sie durch Code und prüfen Sie die Aufrufstapel. Dies ist die leistungsfähigste Funktion zum Debuggen von Logikfehlern.
- Netzwerk: Überwachen Sie HTTP- und WebSocket-Anfragen, die von Ihrer App gestellt werden. Nützlich für die Überprüfung von API-Aufrufen und Antwortdaten.
- Performance: Aufzeichnung und Analyse der Laufzeitleistung, einschließlich FPS, Speichernutzung und JavaScript-Ausführungszeit.
Beachten Sie jedoch, dass Chrome DevTools Debugging einen leichten Overhead einführt, da JavaScript in der Chrome V8 Engine und nicht in der nativen JavaScript Engine (Hermes oder JSC) ausgeführt wird. Dies bedeutet, dass einige Fehler, die nur auf der nativen Engine erscheinen, sich möglicherweise nicht in Chrome reproduzieren.
React Native Debugger: Integrierte Redux und React DevTools
React Native Debugger ist eine eigenständige Desktop-Anwendung, die React DevTools und Redux DevTools in einer einzigen, entwicklerfreundlichen Benutzeroberfläche zusammenführt. Es macht den Wechsel zwischen verschiedenen Tools überflüssig und bietet eine einheitliche Ansicht von Komponentenbäumen, Zustandsänderungen und Redux-Aktionen. Dieses Tool ist besonders vorteilhaft für Projekte, die Redux für die Zustandsverwaltung verwenden, da es Zeitreise-Debugging und Zustands-Diffing aus dem Kasten bietet.
Einrichten von React Native Debugger
Um React Native Debugger zu verwenden:
- Laden Sie die neueste Version aus dem offiziellen GitHub-Repository herunter und installieren Sie sie auf Ihrem Computer.
- Führen Sie die React Native Debugger-Anwendung aus, bevor Sie die React Native-App starten.
- Öffnen Sie das Entwicklermenü Ihrer App und wählen Sie „Debug“ oder, wenn Sie einen benutzerdefinierten Debugger konfiguriert haben, „Debug mit React Native Debugger“. Die App verbindet sich mit dem Debuggerfenster.
- Die Schnittstelle kombiniert ein linkes Panel für React DevTools (Komponentenbaum) und ein rechtes Panel für Redux DevTools (Aktionsprotokoll, Zustandsinspektor).
Neben den dualen DevTools enthält React Native Debugger auch eine integrierte Konsole, einen Netzwerkinspektor und einen Elementinspektor, ähnlich wie Chrome DevTools. Es unterstützt Haltepunkte und Beobachtungsvariablen, was es zu einer umfassenden Debugging-Umgebung macht. Da es JavaScript in Electrons V8-Engine ausführt, teilt es die gleiche Einschränkung wie Chrome DevTools für Hermes-spezifische Probleme.
Wann React Native Debugger über Chrome DevTools verwendet werden sollte
Wenn Ihr Projekt stark auf Redux oder MobX setzt, sind die integrierten State-Management-Tools von React Native Debugger ein Spiel-Wechsel. Sie können Aktionen wiederholen, Zustands-Diffs überprüfen und Zustand jederzeit exportieren. Für Entwickler, die ein separates Fenster bevorzugen, das ausschließlich dem Debuggen ohne Ablenkungen von anderen Chrome-Tabs gewidmet ist, bietet dieses Tool einen saubereren Workflow.
Flipper: Die offizielle React Native Debugging Plattform
Flipper ist eine Open-Source-Plattform, die von Meta (ehemals Facebook) für das Debuggen mobiler Apps entwickelt wurde. Es wurde als Standard-Debugging-Tool für React Native in Version 0.62 übernommen und bietet ein reichhaltiges Plugin-Ökosystem. Flipper läuft nativ neben iOS- und Android-Apps und bietet Funktionen wie Layout-Inspektion, Netzwerkprotokollierung, Crash-Reporting und Datenbankbrowsing. Im Gegensatz zu Chrome DevTools verbindet sich Flipper mit der JavaScript-Engine, die auf dem Gerät läuft (Hermes oder JSC), so dass Fehler, die in der nativen Umgebung auftreten, genauer gemeldet werden.
Installation und Konfiguration von Flipper
So richten Sie Flipper für Ihr React Native Projekt ein:
- Laden Sie Flipper von der offiziellen Flipper-Website herunter.
- Stellen Sie sicher, dass Ihre React Native Version 0,62 oder höher ist (oder fügen Sie Ihrem Projekt manuell Flipper-Abhängigkeiten hinzu).
- Führen Sie Ihre App auf einem Emulator oder Gerät aus. Flipper sollte die App automatisch erkennen, sobald sie gestartet ist. Auf einigen Android-Emulatoren müssen Sie möglicherweise ausführen, um die Kommunikation zu ermöglichen.
- Wenn Flipper keine Verbindung herstellt, überprüfen Sie, ob das Paket in Ihrem und verknüpft ist.
Key Flipper Plugins für React Native
- Layout Inspector: Klicken Sie auf ein beliebiges UI-Element auf dem Gerät, um den Komponentennamen, die Stile, die Eltern-Kind-Hierarchie und die absoluten Koordinaten zu sehen. Dies ist viel leistungsfähiger als das Elements-Panel von Chrome, da es mit nativen Ansichten funktioniert.
- Network Plugin: Zeigen Sie alle Netzwerkanforderungen Ihrer App an, einschließlich Header, Payloads und Timing. Sie können Anforderungen filtern, suchen und wiedergeben. Dieses Plugin zeigt auch fehlgeschlagene Anforderungen und Fehlercodes an.
- Logs Plugin: Zentralisiert ], Android-Logcat- und iOS-NSLog-Einträge. Die Protokolle sind farblich nach Log-Level codiert und können nach Tags gefiltert werden.
- Crash Reporter Plugin: Erfasst native Abstürze und JavaScript-Stack-Traces und bietet eine Zeitleiste von Ereignissen, die zum Absturz führen.
- Hermes Debugger Plugin: Wenn Sie Hermes als JavaScript-Engine verwenden, ermöglicht dieses Plugin das Debuggen mit Haltepunkten, Step-Over und Variable-Inspektion direkt auf dem Gerät.
- Database Plugin: Durchsuchen und Bearbeiten von SQLite-Datenbanken, die Ihre App während der Entwicklung verwendet, um die Überprüfung der Datenpersistenz zu erleichtern.
Die Plugin-Architektur von Flipper ermöglicht auch benutzerdefinierte Plugins. Teams erstellen häufig Plugins, um den Zustand der internen App zu visualisieren, Serverantworten zu simulieren oder Analyseereignisse zu protokollieren. Diese Flexibilität macht Flipper zum zukunftssichersten Debugging-Tool im React Native-Ökosystem.
Performance Profiling und Memory Debugging
Neben der Behebung von Logikfehlern ist das Debuggen von Leistungsproblemen entscheidend, um eine reibungslose Benutzererfahrung zu gewährleisten. React Native bietet mehrere Möglichkeiten, die Leistung Ihrer App zu profilieren.
Verwendung des React Native Performance Monitors
Das Entwicklermenü enthält eine Option "Perf Monitor anzeigen", die einen kleinen Graphen auf Ihrer App überlagert.
- FPS: Frames per second. A smooth experience should maintain 60 FPS (or 90/120 on high refresh rate devices). drops below 30 FPS indicated jank.
- JS FPS: Die Framerate des JavaScript-Threads. Wenn dieser abfällt, blockiert Ihr JavaScript-Code möglicherweise den Hauptthread.
- RAM Usage: Approximieren Sie den Speicherverbrauch der App.
- View Count: Die Anzahl der nativen Ansichten, die derzeit gemountet sind.
Verwenden Sie diesen Monitor als ersten Indikator, dass etwas nicht stimmt, und verwenden Sie dann granularere Werkzeuge, um die Ursache zu ermitteln.
Profiling mit Chrome DevTools Performance Tab
Beim Debuggen mit Chrome DevTools aus der Ferne kann die Registerkarte Performance eine Zeitleiste Ihrer JavaScript-Ausführung aufzeichnen, einschließlich Funktionsaufrufen, Layouts und Malereignissen.
- Öffnen Sie die Chrome DevTools, die mit Ihrer App verbunden sind.
- Gehen Sie zur Registerkarte Performance und klicken Sie auf den Record-Button.
- Interagieren Sie mit Ihrer App, um das Leistungsproblem zu reproduzieren.
- Stoppen Sie die Aufzeichnung und analysieren Sie die Flammenkarte. Suchen Sie nach lang laufenden Funktionen, häufigen Layouts oder übermäßigen Wiedergaben.
Da JavaScript jedoch in Chrome läuft, können sich die Leistungszahlen (insbesondere der Arbeitsspeicher) vom tatsächlichen Gerät unterscheiden.
Speicher-Debugging mit Xcode und Android Studio
Verwenden Sie für native Speicherlecks plattformspezifische Tools:
- Xcode-Instrumente (iOS): Führen Sie Ihre App in Xcode aus und verwenden Sie dann die Lecks und Zuweisungen, um zurückgehaltene Objekte und Speicherwachstum zu erkennen.
- Android Studio Profiler (Android): Öffnen Sie die Registerkarte Profiler, wenn Sie Ihre App auf einem Emulator oder Gerät ausführen. Es zeigt die Speicher-, CPU- und Netzwerknutzung in Echtzeit an.
Diese Tools sind unerlässlich, wenn Probleme behoben werden, die erst nach längerer Nutzung der App auftreten, wie z. B. Speicherlecks von nicht entfernten Zuhörern oder nicht montierten Komponenten.
Häufige Debugging-Szenarien und Lösungen
Selbst mit leistungsfähigen Tools beschleunigt das Wissen, wie man sich spezifischen Problemen nähert, die Lösung. Hier sind einige häufige Probleme, die bei der Entwicklung von React Native auftreten und wie man sie debuggt.
"Modul kann nicht gelöst werden" Fehler
Dies geschieht häufig, wenn ein Paket fehlt oder eine Versionsabweichung vorliegt. Überprüfen Sie Ihre und stellen Sie sicher, dass Sie oder ausgeführt haben. Wenn es sich bei dem Modul um eine lokale Datei handelt, überprüfen Sie den Importpfad. Verwenden Sie die Fehlermeldung des Metro-Bundlers, um zu sehen, welche Datei fehlschlägt. Sie können den Metro-Cache auch mit löschen.
Blank Screen beim App Launch
Ein leerer Bildschirm zeigt normalerweise einen JavaScript-Fehler während der Initialisierung an. Mit Chrome DevTools oder React Native Debugger öffnen Sie das Konsolenfeld, um die Fehlermeldung zu sehen. Häufige Ursachen sind Syntaxfehler, fehlende oder falsche native Modulverknüpfung. Wenn der Fehler nativer ist (z. B. ein fehlender Pod), zeigt die Gerätekonsole oder das Flipper-Logs-Plugin die Details an.
Zustand nicht wie erwartet aktualisiert
Zustandsverwaltungsprobleme können schwierig sein. Verwenden Sie React DevTools (entweder in React Native Debugger oder Chrome DevTools mit der Erweiterung React Developer Tools), um den Komponentenbaum zu inspizieren und den aktuellen Zustand und die Requisiten zu überprüfen. Für Redux-Apps öffnen Sie das Redux DevTools-Panel und vergleichen Sie die versandte Aktion mit dem erwarteten Zustandsdiff. Setzen Sie Haltepunkte innerhalb von Reduzierern, um zu überprüfen, ob Aktionen die richtigen Zustandsübergänge erzeugen.
Langsame Scroll-Leistung
Scroll-Performance-Probleme entstehen oft durch übermäßige Re-Render oder große Listen. Überprüfen Sie den React Native Performance Monitor auf FPS-Drops. Dann Profil mit Chrome DevTools, um zu sehen, welche Komponenten häufig erneut rendern. Verwenden Sie , oder , um unnötige Updates zu verhindern. Verwenden Sie mit oder wechseln Sie zu für eine bessere Leistung.
Integration von Debugging in Ihren Entwicklungs-Workflow
Debugging-Tools sind am effektivsten, wenn sie während des gesamten Entwicklungszyklus konsistent verwendet werden, nicht nur wenn ein Fehler auftritt.
Automatisierte Fehlerbehandlung einrichten
Verwenden Sie Fehlergrenzen in Ihren React-Komponenten, um JavaScript-Fehler anmutig zu erfassen und protokollieren Sie sie bei einem System wie Sentry oder Bugsnag. Während der Entwicklung können Sie diese Protokolle an Flipper oder die Konsole umleiten, damit Sie Probleme frühzeitig erkennen.
Testable und Debuggable Code schreiben
Zerlegen Sie Ihren Code in kleine, reine Funktionen und Komponenten. Dadurch wird es einfacher, Fehler zu isolieren und Unit-Tests zu schreiben. Wenn ein Problem auftritt, können Sie es schnell in einer Testumgebung reproduzieren, ohne dass die vollständige App ausgeführt wird. Tools wie Jest und React Native Testing Library ergänzen Ihre Debugging-Bemühungen, indem Sie Regressionen abfangen, bevor sie die Produktion erreichen.
Verwenden Sie Hot Reloading und Fast Refresh
React Native's Fast Refresh (standardmäßig in den letzten Versionen aktiviert) ermöglicht es Ihnen, Änderungen sofort zu sehen, ohne den Status der App zu verlieren. Es kann jedoch Probleme verbergen, die nur bei einem neuen App-Start auftreten.
Automatisiertes Testen mit Debugging
Kombinieren Sie Debugging mit automatisierten Tests, indem Sie Tools wie Detox oder Appium für End-to-End-Tests verwenden.Wenn ein e2e-Test fehlschlägt, verwenden Sie das Screenshot-Tool von Flipper, um den Benutzeroberflächenzustand im Moment des Fehlers zu erfassen, oder integrieren Sie es mit Flipper, um bei Testfehlern für die manuelle Inspektion anzuhalten.
Continuous Integration Debugging
In CI/CD-Pipelines kann Debugging eine Herausforderung darstellen, da es keine interaktive Benutzeroberfläche gibt. Verwenden Sie die Befehle und , um Protokolle zu streamen, oder erfassen Sie Flipper-Protokolle programmgesteuert mit dem Flipper SDK. Speichern Sie Ihre CI-Dateien für Crash-Protokolle und Screenshots als Artefakte für die Post-Build-Analyse.
Zukunftssicheres Debugging-Setup
Das React Native Ökosystem entwickelt sich schnell und Debugging-Tools folgen. Hermes, die für React Native optimierte JavaScript-Engine, ist jetzt Standard für neue Projekte. Das Hermes Debugger Plugin von Flipper wird ständig verbessert und das Flipper-Team fügt Funktionen wie Datenbankimport und Netzwerkanforderungs-Mocking hinzu. Inzwischen wird das eigenständige Tool von React DevTools zugunsten des eingebauten React DevTools Plugins von Flipper veraltet.
Behalten Sie die offizielle React Native Debugging Dokumentation im Auge, um Updates zu erhalten. Überprüfen Sie auch die Flipper Website für neue Plugins und Verbesserungen. Während die Community wächst, vereinfachen Bibliotheken von Drittanbietern wie den Einrichtungsprozess weiter.
Durch das Beherrschen von Tools wie Chrome DevTools, React Native Debugger und Flipper und durch die Annahme einer proaktiven Debugging-Mentalität können Sie Ihre Entwicklungszyklen drastisch verkürzen und robustere React Native-Anwendungen erstellen. Beim Debuggen geht es nicht nur darum, Fehler zu beheben - es ist eine wesentliche Praxis, die Ihr Verständnis des Frameworks schärft und zu saubererem, wartbarerem Code führt. Beginnen Sie noch heute mit der Integration dieser Tools in Ihren Workflow und Sie werden sofortige Verbesserungen sowohl in Geschwindigkeit als auch in Qualität sehen.