Ας είμαστε ειλικρινείς: το debugging στο React Native έχει αλλάξει εντελώς τα τελευταία δύο χρόνια — και προσωπικά, αυτή η αλλαγή με βρίσκει σύμφωνο. Η αποσυρόμενη υποστήριξη του Flipper, η μετάβαση στη Νέα Αρχιτεκτονική (Fabric/TurboModules) και, κυρίως, η ωρίμανση των επίσημων React Native DevTools έχουν διαμορφώσει ένα τελείως νέο workflow για το 2026. Σε αυτόν τον οδηγό θα δούμε βήμα-βήμα πώς να τα χρησιμοποιήσετε μέσα σε ένα έργο Expo SDK 53, πώς να εντοπίζετε bugs με breakpoints, να επιθεωρείτε network traffic, να κάνετε profiling στην απόδοση και (το πιο σημαντικό) πώς να διορθώνετε τα πιο συνηθισμένα προβλήματα που θα συναντήσετε στην πορεία.
Τι είναι τα React Native DevTools
Τα React Native DevTools είναι ο επίσημος debugger της ομάδας του React Native, βασισμένος στο Chrome DevTools Frontend και στο Hermes debugger protocol. Αντικαθιστούν πλήρως τόσο τον παλιό remote JS debugger όσο και το Flipper, που πλέον δεν υποστηρίζονται στις νέες εκδόσεις (0.73+). Τι σας δίνουν συγκεκριμένα;
- Native breakpoints απευθείας πάνω στο Hermes engine — χωρίς σύνδεση μέσω WebSocket, χωρίς καθυστερήσεις.
- Console με πλήρη υποστήριξη για
console.log,console.table,console.group. - Network panel για επιθεώρηση HTTP/HTTPS requests.
- React Components inspector και Profiler.
- Performance profiler για JS execution και CPU sampling.
- Memory inspector για heap snapshots (απαραίτητο για memory leaks).
Προαπαιτούμενα και έκδοση εργαλείων
Για να ακολουθήσετε τον οδηγό χωρίς δράμα, χρειάζεστε:
- Node.js 20 LTS ή νεότερο
- Expo SDK 53 (React Native 0.79)
- Hermes ως JavaScript engine — που είναι, ευτυχώς, default στο Expo
- Google Chrome ή Microsoft Edge έκδοσης 120+
Ενεργοποίηση των DevTools σε Expo project
Καλά νέα: σε ένα έργο Expo δεν χρειάζεται καμία επιπλέον εγκατάσταση. Απλά ξεκινήστε τον dev server:
npx expo start --dev-client
Όταν τρέξετε την εφαρμογή σε προσομοιωτή ή φυσική συσκευή, πατήστε j στο τερματικό και ο debugger ανοίγει αυτόματα στον Chrome. Εναλλακτικά, ανοίξτε το developer menu στη συσκευή (shake gesture, ή Cmd+D στο iOS Simulator, Cmd+M στο Android emulator) και επιλέξτε Open DevTools. Τόσο απλά.
Console και logging best practices
Το console panel των DevTools υποστηρίζει πλέον δομημένο logging — και ειλικρινά, όταν το συνηθίσετε δεν γυρίζετε πίσω. Αντί για απλά console.log σκορπισμένα παντού, δοκιμάστε αυτό:
// Group related logs
console.group('User Authentication');
console.log('Email:', user.email);
console.log('Token:', token);
console.groupEnd();
// Tabular data
console.table(products, ['id', 'name', 'price']);
// Performance timing
console.time('fetchUsers');
const users = await api.getUsers();
console.timeEnd('fetchUsers');
Tip: Σε production builds, αφαιρέστε όλα τα console.* calls με το babel plugin transform-remove-console. Αλλιώς ρισκάρετε memory leaks και πτώση απόδοσης — και κανείς δεν θέλει να ψάχνει γιατί η εφαρμογή του τρώει 200MB RAM χωρίς λόγο.
Breakpoints και step-through debugging
Τα DevTools υποστηρίζουν τρία είδη breakpoints:
- Line breakpoints: απλό κλικ στον αριθμό γραμμής στο Sources panel.
- Conditional breakpoints: δεξί κλικ και επιλέξτε Add conditional breakpoint με κάποιο expression — π.χ.
userId === 42. - Logpoints: αντί να σταματούν την εκτέλεση, εκτυπώνουν τιμές στο console. Ιδανικά για production-like debugging όπου δεν θέλετε να παγώσει το flow.
Ορίστε ένα απλό παράδειγμα κώδικα που μπορούμε να debug-άρουμε:
import { useState } from 'react';
import { View, Button, Text } from 'react-native';
export default function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
const next = count + 1; // βάλτε breakpoint εδώ
if (next % 5 === 0) {
console.log('Multiple of 5!', next);
}
setCount(next);
};
return (
<View>
<Text>Count: {count}</Text>
<Button title="Increment" onPress={increment} />
</View>
);
}
Network inspection με τα DevTools
Από την έκδοση 0.76 και μετά, το Network panel καταγράφει αυτόματα όλα τα fetch και XMLHttpRequest calls. Επιτέλους — τέλος στο react-native-flipper-network-plugin και τα όσα τραβούσαμε για να βλέπουμε ένα απλό POST.
// Όλα τα παρακάτω καταγράφονται αυτόματα:
const res = await fetch('https://api.example.com/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Maria' }),
});
const data = await res.json();
Στο Network panel βλέπετε headers, payload, response body, timing και status code. Για WebSocket connections, υπάρχει ξεχωριστή κατηγορία WS (που είναι εξαιρετική όταν δουλεύετε με real-time data).
React Components και Profiler
Το Components tab εμφανίζει το πλήρες δέντρο των React components, μαζί με props, state, hooks και contexts. Μπορείτε να επιλέξετε ένα component απευθείας από το UI πατώντας το εικονίδιο Select element και έπειτα τοποθετώντας τον δείκτη στη συσκευή.
Το Profiler tab, από την άλλη, καταγράφει re-renders — και εδώ είναι που τα πράγματα γίνονται ενδιαφέροντα. Πατήστε Record, εκτελέστε την ενέργεια που θέλετε να μετρήσετε, σταματήστε. Θα δείτε:
- Flame graph: ποιο component πήρε πόσο χρόνο.
- Ranked chart: components ταξινομημένα κατά κόστος.
- Why did this render?: ο λόγος επανασχεδίασης (props change, hook change, parent re-render). Αυτό από μόνο του αξίζει.
Performance profiling στο JS thread
Για να εντοπίσετε bottlenecks στον JavaScript κώδικα, ανοίξτε το Performance tab:
- Πατήστε Record.
- Εκτελέστε το σενάριο σας (π.χ. scroll σε μια μεγάλη λίστα).
- Πατήστε Stop.
Το flame graph αποκαλύπτει long tasks (>50ms) που πιθανότατα προκαλούν jank στο UI. Εστιάστε σε όσα έχουν κόκκινο τρίγωνο — αυτά είναι που μπλοκάρουν το main thread και θα τα δείτε σαν dropped frames.
Από την εμπειρία μου, οι πιο συνηθισμένες αιτίες είναι:
- Heavy
JSON.parseπάνω σε μεγάλα payloads (παράξενα συχνό σε apps με paginated API). - Synchronous κρυπτογράφηση χωρίς χρήση
InteractionManager.runAfterInteractions. - Re-renders λόγω αλλαγής reference σε arrays/objects — η κλασική παγίδα που λύνεται με
useMemo.
Memory inspection και leak detection
Στο Memory tab μπορείτε να τραβήξετε heap snapshot και να δείτε τι κρατάει η εφαρμογή σας στη μνήμη:
1. Επιλέξτε "Heap snapshot"
2. Πατήστε "Take snapshot"
3. Φιλτράρετε με "Retained Size"
Συγκρίνετε δύο snapshots για να βρείτε αντικείμενα που δεν αποδεσμεύονται μετά από κάποια ενέργεια. Οι συνήθεις ένοχοι; Event listeners χωρίς cleanup μέσα σε useEffect, και global stores που κρατούν refs σε components τα οποία έχουν ήδη unmount-αριστεί.
Debugging σε φυσική συσκευή μέσω Wi-Fi
Για να συνδέσετε iPhone ή Android συσκευή χωρίς καλώδιο:
# Android
adb tcpip 5555
adb connect 192.168.1.42:5555
# iOS — Network connection in Xcode > Devices and Simulators
Στη συνέχεια τρέξτε npx expo start --tunnel και πατήστε j. Έτοιμοι.
Συνηθισμένα προβλήματα και λύσεις
"Could not connect to development server"
Συνήθως οφείλεται σε firewall ή σε λάθος IP. Βεβαιωθείτε ότι η συσκευή και ο υπολογιστής είναι στο ίδιο δίκτυο (όχι το guest network του router σας — ναι, έχει συμβεί). Στο app.config.js δοκιμάστε να ορίσετε developmentClient.silentLaunch: true.
Breakpoints δεν "πιάνουν"
Επιβεβαιώστε ότι όντως χρησιμοποιείτε Hermes (jsEngine: "hermes" στο app.json) και ότι το source map παράγεται σωστά. Στις περισσότερες περιπτώσεις φταίει το cache — καθαρίστε το με npx expo start --clear.
Πολύ αργό hot reload
Απενεργοποιήστε το Fast Refresh προσωρινά για να δείτε αν είναι αυτό. Ελέγξτε το μέγεθος του node_modules και προσθέστε watchman exclude rules για directories όπως android/build και ios/Pods — εκεί χάνεται συνήθως όλη η ταχύτητα.
Συχνές Ερωτήσεις (FAQ)
Είναι ακόμα ενεργό το Flipper στο React Native 2026;
Όχι. Η υποστήριξη Flipper έχει αφαιρεθεί από το core React Native από την έκδοση 0.74 και πέρα. Όλες οι λειτουργίες έχουν μεταφερθεί στα επίσημα React Native DevTools, οπότε δεν χρειάζεται καν να το σκέφτεστε.
Μπορώ να κάνω debug Hermes bytecode;
Ναι, και μάλιστα διαφανώς. Τα React Native DevTools συνδέονται απευθείας στο Hermes Inspector Protocol και υποστηρίζουν source maps, οπότε βλέπετε τον αρχικό κώδικα TypeScript/JavaScript ακόμα κι όταν στο παρασκήνιο τρέχει bytecode.
Πώς γίνεται debugging σε production builds;
Σε production builds (release variants) ο debugger είναι απενεργοποιημένος για λόγους ασφαλείας — και σωστά. Για να αναλύσετε bugs στην παραγωγή, χρησιμοποιήστε crash reporters όπως Sentry ή το expo-error-recovery. Εναλλακτικά, φτιάξτε ένα preview build με EAS που κρατά τα source maps.
Λειτουργούν τα DevTools σε Expo Go;
Ναι, πλήρως. Το Expo Go περιλαμβάνει το dev menu και αρκεί να πατήσετε Open JS Debugger. Ωστόσο, αν χρειάζεστε native modules εκτός Expo SDK, θα πρέπει να φτιάξετε development build.
Πόσο επηρεάζει το debugging την απόδοση;
Το profiling και τα breakpoints προσθέτουν περίπου 5–15% overhead στο JS thread. Για ακριβείς μετρήσεις απόδοσης χρησιμοποιήστε release ή preview builds με ενεργοποιημένο μόνο το performance monitor — όχι ολόκληρο τον debugger.
Συμπέρασμα
Τα React Native DevTools του 2026 είναι, χωρίς υπερβολή, ένα πλήρες και ώριμο εργαλείο που καλύπτει όλη τη ροή debugging — από απλό console.log μέχρι heap analysis και render profiling. Σε συνδυασμό με το Expo SDK 53 και τη Νέα Αρχιτεκτονική, αποτελούν πια το standard για κάθε σοβαρό React Native developer. Αν δεν τα έχετε ενσωματώσει ακόμα στη ροή σας, ξεκινήστε σήμερα με breakpoints και logpoints. Θα δείτε άμεση μείωση στον χρόνο εντοπισμού bugs — και αυτό, στην καθημερινότητα, μεταφράζεται σε λιγότερο stress και περισσότερο shipping.