--- title: Debugging tools description: Learn about different tools available to debug your Expo project. sidebar_title: Tools --- import ImageSpotlight from '~/components/plugins/ImageSpotlight'; import { Terminal } from '~/ui/components/Snippet'; import Video from '~/components/plugins/Video'; This page lists a few tools to help debug your Expo project. ### Developer menu This menu gives you access to several functions which are useful for debugging and is built into the Expo Go app. The way you open it is a bit different depending on where you're running the Expo Go app: - Android Device: Shake the device vertically, or if your device is connected via USB, run `adb shell input keyevent 82` in your terminal - Android Emulator: Either press Cmd ⌘ + m or Ctrl + m or run `adb shell input keyevent 82` in your terminal - iOS Device: Shake the device, or touch 3 fingers to the screen - iOS Simulator: Press Ctrl + Cmd ⌘ + z on a Mac in the emulator to simulate the shake gesture, or press Cmd ⌘ + d Once you have opened the Developer menu, it will appear as below: The Developer menu provides multiple options: - Reload: reloads your app. Usually not necessary since Fast Refresh is enabled by default - Copy Link: copy the [`exp://`](/guides/linking/#linking-to-expo-go) link of your app. - Go Home: leave your app and navigate back to the Expo Go app's Home screen - Enable/Disable Fast Refresh: toggle automatic refreshing of the JS bundle whenever you make changes to files in your project using a text editor Now let's explore some of the more exciting functionalities. #### Debug Remote JS Opens a React Native Debugger tab in your browser to allow you to use DevTools. For example, you can use the Console tab to read the `console.log` statements. It uses [`@react-native-community/cli-debugger-ui`](https://github.com/react-native-community/cli/tree/main/packages/cli-debugger-ui): > **warning** The Network tab will not work out of the box. To enable the Network tab and other debugging tools, additional setup is required, see the [React Native Debugger](#react-native-debugger) and [React DevTools](#debugging-with-react-devtools) sections below. #### Show Performance Monitor Opens up a small window giving you performance information about your app. It provides: - RAM usage of your project - JavaScript heap (this is an easy way to know of any memory leaks in your application) - 2 numbers for Views, the top indicates the number of views for the screen, the bottom indicates the number of views in the component - Frames Per Second for the UI and JS threads. The UI thread is used for native Android or iOS UI rendering. The JS thread is where most of your logic runs, including API calls, touch events, and so on. #### Show/Hide Element Inspector Opens up the Element Inspector overlay: This overlay has capabilities to: 1. Inspect: Inspect elements 2. Perf: Show Performance overlay 3. Network: Show network details 4. Touchables: Highlight touchable elements ### React Native Debugger The React Native Debugger includes many tools listed later on this page, all bundled into one, including [React DevTools](#debugging-with-react-devtools) and network request inspection. For this reason, if you use one tool from this page, it should probably be this one. We'll give a quick look at it here, but check out their [documentation](https://github.com/jhen0409/react-native-debugger#documentation) for a more in-depth look. You can install it via the [release page](https://github.com/jhen0409/react-native-debugger/releases), or if you're on macOS you can run: #### Startup After firing up React Native Debugger, you'll need to specify the port (shortcuts: Cmd ⌘ + t on macOS, Ctrl + t on Linux/Windows) to `19000` (if you use SDK <= 39, the port should be `19001`>). After that, run your project with `npx expo start`, and select `Debug remote JS` from the Developer Menu. The debugger should automatically connect. In the debugger console, you can see the Element tree, as well as the props, state, and children of whatever element you select. You also have the Chrome console on the right, and if you type `$r` in the console, you will see the breakdown of your selected element. If you right-click anywhere in the React Native Debugger, you'll get some handy short-cuts to reload your JS, enable/disable the element inspector, network inspector, and to log and clear your `AsyncStorage` content.