Debug React Native apps including metro bundler issues, native errors, performance problems, and crash analysis. Use when troubleshooting errors or investigating issues.
Debugging guide for React Native and Expo applications.
# Clear all caches
npx expo start --clear
watchman watch-del-all
rm -rf node_modules && npm install
# Reset packager cache
rm -rf /tmp/metro-*
rm -rf /tmp/haste-*
# iOS: Reset pods
cd ios && pod deintegrate && pod install && cd ..
# Android: Clean build
cd android && ./gradlew clean && cd ..
# Expo: Prebuild clean
npx expo prebuild --clean
# iOS: Reset simulator
xcrun simctl erase all
# Android: Wipe emulator data
adb devices # Find device ID
adb -s DEVICE_ID emu kill
# Install
npm install -g react-devtools
# Start
react-devtools
# In app: Shake device -> "Debug Remote JS"
# View detailed logs
npx expo start --verbose
# iOS device logs
npx react-native log-ios
# Android device logs
npx react-native log-android
adb logcat
// Enable network inspector
import { Platform } from 'react-native';
if (__DEV__ && Platform.OS === 'ios') {
require('react-native').NativeModules.DevSettings.setIsDebuggingRemotely(true);
}
// Or use Flipper for advanced network inspection
// Add performance logging
import { useEffect, useRef } from 'react';
function useRenderTime(componentName: string) {
const start = useRef(performance.now());
useEffect(() => {
const duration = performance.now() - start.current;
if (duration > 16) {
console.warn(`Slow render: ${componentName} took ${duration.toFixed(2)}ms`);
}
});
}
// Use in components
function MyComponent() {
useRenderTime('MyComponent');
return <View>...</View>;
}
// Check for missing cleanup
useEffect(() => {
const subscription = someObservable.subscribe();
const timer = setInterval(() => {}, 1000);
// MUST clean up!
return () => {
subscription.unsubscribe();
clearInterval(timer);
};
}, []);
# Look for error in stack trace
# Check recent file changes
# Verify imports and dependencies
# Check for typos in variable names
# iOS: Check Xcode console
# Android: Check Android Studio Logcat
# Look for Java/Swift exceptions
# Check native module compatibility
# Check package versions
npx expo-doctor
# Verify node/npm versions
node --version
npm --version
# Check for conflicting dependencies
npm ls PACKAGE_NAME
# Check what's using a port
lsof -ti:8081 # Metro bundler port
lsof -ti:19000 # Expo DevTools
# Kill process on port
kill -9 $(lsof -ti:8081)
# Check device connectivity
# iOS
xcrun simctl list devices
# Android
adb devices
# Restart adb
adb kill-server
adb start-server
When investigating issues:
npx skills add aiskillstore/mobile-debugging下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer