| name | Testing and Debugging |
| description | Debug tools, developer menu, and troubleshooting |
Testing and Debugging
Developer Menu
Access by tapping Version number in More > About 7 times.
Features:
- Clear cache
- Reset settings
- View logs
- Export debug info
- Test notifications
Console Logging
console.log('Info:', data);
console.warn('Warning:', message);
console.error('Error:', error);
console.log(JSON.stringify(object, null, 2));
console.group('Loading manga');
console.log('Source:', sourceId);
console.log('Manga:', mangaId);
console.groupEnd();
View logs in:
- Metro bundler terminal
- React Native Debugger
- Flipper
Developer Service
import { developerService } from '../services/developerService';
const isDevMode = await developerService.isDevModeEnabled();
await developerService.enableDevMode();
await developerService.clearAllData();
const logs = await developerService.exportLogs();
Common Issues
| Issue | Debug Steps |
|---|
| Extension not loading | Check WebView console, verify URL |
| Images not showing | Check network, verify URLs, check cache |
| Crash on startup | Clear app data, check Metro logs |
| Slow performance | Profile with React DevTools |
| Downloads failing | Check storage space, permissions |
Metro Bundler
npx expo start -c
npx expo start --verbose
rm -rf node_modules/.cache
npx expo start -c
React DevTools
npm install -g react-devtools
react-devtools
Then shake device and select "Debug with React DevTools".
Network Debugging
if (__DEV__) {
const originalFetch = global.fetch;
global.fetch = async (...args) => {
console.log('Fetch:', args[0]);
const response = await originalFetch(...args);
console.log('Response:', response.status);
return response;
};
}
Performance Profiling
const start = performance.now();
console.log(`Render took ${performance.now() - start}ms`);
const MemoizedComponent = React.memo(ExpensiveComponent);
if (__DEV__) {
const whyDidYouRender = require('@welldone-software/why-did-you-render');
whyDidYouRender(React);
}
Build Debugging
cd android && ./gradlew assembleRelease --info
npx expo run:ios --verbose
npx expo-doctor
Crash Reports
ErrorUtils.setGlobalHandler((error, isFatal) => {
console.error('Global error:', error);
});
if (__DEV__) {
require('promise/setimmediate/rejection-tracking').enable({
allRejections: true,
onUnhandled: (id, error) => {
console.warn('Unhandled promise:', error);
},
});
}
Test Builds
cd android && ./gradlew assembleDebug
npx expo run:ios --configuration Debug
eas build --platform android --profile preview