Lesson 24 / 25
Debugging and Monitoring
Find problems in development and production.
DevTools, logs and crash reporting
React Native DevTools is the modern debugger for Hermes apps: open it from the dev menu or by pressing j in the Expo CLI or Metro terminal to get a console, source-level breakpoints, React component inspection and the profiler. The in-app dev menu also offers reload and performance monitoring, and native issues appear in Xcode and Android Studio logs (Logcat). In production you cannot attach a debugger, so add crash and error reporting such as Sentry, Bugsnag or Firebase Crashlytics, upload source maps so stack traces point to your source, and track key metrics such as start-up time, crash-free sessions and failed requests. Tag reports with the app version and update id to see which release caused a problem.
Reporting errors with Sentry
Sketch using @sentry/react-native; check the docs for your version.
import * as Sentry from "@sentry/react-native";
Sentry.init({
dsn: process.env.EXPO_PUBLIC_SENTRY_DSN,
tracesSampleRate: 0.2, // sample a share of sessions for performance data
enabled: !__DEV__, // report only from release builds
});
export async function placeOrder(cartId: string) {
try {
const res = await fetch(`https://api.example.com/carts/${cartId}/order`, { method: "POST" });
if (!res.ok) throw new Error(`Order failed: ${res.status}`);
} catch (err) {
Sentry.captureException(err, { tags: { feature: "checkout" } });
throw err;
}
}Add an error boundary
A React error boundary at the root shows a friendly fallback screen instead of a blank app and reports the error to your monitoring tool.
Quick check: Why upload source maps to a crash reporter?
- To enable OTA updates
- To make the app bundle smaller
- So minified production stack traces map back to your original source
- To request permissions
Answer
So minified production stack traces map back to your original source — Readable traces make crashes fixable.