347

How does one debug their React code with React Native while the app is running in app simulator?

2

51 Answers 51

190

Mac: Cmd+M

Windows and Linux: Ctrl+M

Use the appropriate hotkey above from within the Simulator. It'll popup Chrome and from there you can use the Developer Tools.

enter image description here

Edit:

This is now linked in the help docs.

13
  • 9
    Using v8.2 simulator, Cmd+D seems to do nothing. Chrome is latest. Is some special plugin in chrome needed or a proxy?
    – McG
    Commented Mar 27, 2015 at 1:27
  • 5
    Getting "Websocket debugger is not available. Did you forget to include RCTWebSocketExecutor?". :/ Commented Mar 27, 2015 at 3:04
  • 1
    I had the following error: /Users/Serge/projects/serge/MyProject/node_modules/react-native/packager/launchChromeDevTools.applescript:668:671: script error: Expected class name but found property. (-2741). I found out that if I disabled sharing Windows applications with Mac in Parallels that it starts working. See stackoverflow.com/questions/29310936/…. Commented Mar 27, 2015 at 22:31
  • 13
    That'll be Cmd+M on OS X and Android
    – flaky
    Commented Sep 29, 2017 at 7:20
  • 5
    Note that Cmd+D will do nothing if your Build Configuration is set to "Release"- make sure it is set to "Debug".
    – jwinn
    Commented Sep 13, 2019 at 21:08
102

Debugging React Native Apps

To debug the javascript code of your react app do the following:

  1. Run your application in the iOS simulator.
  2. Press Command + D and a webpage should open up at http://localhost:8081/debugger-ui. (Chrome only for now) or use the Shake Gesture
  3. Enable Pause On Caught Exceptions for a better debugging experience.
  4. Press Command + Option + I to open the Chrome Developer tools, or open it via View -> Developer -> Developer Tools.
  5. You should now be able to debug as you normally would.

Optional

Install the React Developer Tools extension for Google Chrome. This will allow you to navigate the view hierarchy if you select the React tab when the developer tools are open.

Live Reload

To activate Live Reload do the following:

  1. Run your application in the iOS simulator.
  2. Press Control + Command + Z.
  3. You will now see the Enable/Disable Live Reload, Reload and Enable/Disable Debugging options.
5
  • This answer basically copies the doc, which is a start, but not especially illuminating. What does "debug as you normally would" mean in this context? Commented Oct 18, 2015 at 9:19
  • 7
    Important note: React Developer Tools hasn't been working with React Native for months, and remains to be fixed. More info here: github.com/facebook/react-devtools/issues/229 Commented Jan 21, 2016 at 14:34
  • Who said this is on mac?
    – shinzou
    Commented Aug 5, 2017 at 7:06
  • @shinzou it's implied by the mention of a simulator (it's simulator for iOS devs, emulator for Android devs). Yes I know it's been a while, but still, just FWIW Commented Jan 22, 2019 at 10:59
  • that extension doesn't work with react-native. instead, you should see this: reactnative.dev/docs/debugging#react-developer-tools Commented Mar 20, 2022 at 10:44
74

For an Android App, if you're using Genymotion you can toggle the menu by pressing CMD + m, but you may have to enable it in the menu by doing this.

  • Untick widget
  • Enable it by CMD + m click on debug in chrome
3
  • 6
    Finally found an Android solution, thanks! And in latest version, the debug in chrome is replaced with start debug remotely.
    – MewX
    Commented May 6, 2017 at 2:26
  • @MewX Could you please let us know how to do that ? 🤔
    – Mo.
    Commented May 3, 2018 at 12:33
  • @Muhammed Hi, you could just follow cmd + m or ctrl + m, and select start debug remotely from the popup windows in your simulator
    – MewX
    Commented May 3, 2018 at 14:16
55

if you want to debug using android device on Windows just open a command prompt then type ( make sure your adb working properly)

adb shell input keyevent 82

it will prompt a screen like the image enter image description here

then select

debug JS Remotely

it will automatically open a new window.then open inspect element or press F12 for console.

1
  • is there an iOS equivalent to this command? I just started recently with RN and this would help a lot in the future Commented Oct 30, 2017 at 15:31
38

cmd ⌘ + D oddly didn't work for me. Pressing ctrl + cmd ⌘ + Z in the iOS simulator did kick off the debugging browser window for me.

This is the screen that pops up:

React Native debugging options

More details here.

2
  • I don't see these options... :(
    – Noah
    Commented Aug 26, 2019 at 13:53
  • yes in latest works your command works for me Commented Aug 21, 2022 at 10:18
37

In addition to the other answers. You can debug react-native using the debugger statement

example:

debugger; //breaks execution

Your chrome dev tools must be open for this to work

1
  • F ya! That's what I needed! Thanks friend! Commented Jun 19, 2020 at 20:17
31

enter image description here

Try this program: https://github.com/jhen0409/react-native-debugger

Works on: windows, osx and linux.

It supports: react native and redux

You can also inspect the virtual component tree and modify styles that are reflected in the app.

1
  • Can I view value of specific variable via this debugger? I have tried console.log(url), but I cannot find where output is.
    – QuarK
    Commented Feb 12, 2020 at 15:41
20

Debugging react-native 0.40.0 on Debian 8 (Jessie) can be done by navigating to http://localhost:8081/debugger-ui in Chromium or Firebug while your app is running in the android simulator. To access the in-app developer menu, run the following command in another terminal window, as pointed out here:

adb shell input keyevent 82

1
  • You can also do this by pressing D in your terminal running Metro.
    – Ian
    Commented Jun 29, 2022 at 22:42
18

I don't have enough reputation to comment on the previous answers which are great. :) Here are some of the ways how I am debugging when developing react-native app.

  1. Live reloading

    react-native makes it super easy to see your changes with the ⌘ + R keys or even just enable live reload and watchman will "refresh" the simulator with the latest changes. If you get an error, you can get a clue from the line number from that red screen. A couple of undo will get you back to working state and start again.

  2. console.log('yeah, seriously.')

    I find myself prefer letting the program run and logging some informations than adding a debugger break point. (tough debugger is useful when trying to work with external packages/libraries and it comes with autocompletion, so you know what other methods you can utilise.)

  3. Enable Chrome Debugging with debugger; break point in your program.

Well it depends on the type of errors you encountered and your preferences of how to debug. For most of the undefined is not an object (evaluating 'something.something'), method 1 and 2 will be good enough for me.

Whereas dealing with external libraries or packages written by other developers will require more effort to debug hence a good tool like Chrome Debugging

Sometimes it is coming from the react-native platform itself so googling for react-native issues will definitely helps.

hope this helps someone out there.

17

React Native 0.62 Released - The Official solution is Flipper

Flipper is Android & iOS Mobile debugging tools without using debug mode in react native.

Since RN 0.62 (See this link), Flipper is initialized with default project.

Flipper has a few of plugins for debugging. The plugins include Layout, Network, Shared preferences

The greatest benefit of Flipper is not also many plugins but you can see Android / iOS device console debugging easily too.

The Flipper alert you about crash or network rejection too.

enter image description here

Layout plugin includes accessibility mode and target mode.

enter image description here

You can also see raw network request / response in your Application.

3
  • Do we have to manually install Flipper? Or is it shipped with React Native somehow? If so, how do we open it?
    – Charanor
    Commented May 29, 2020 at 14:01
  • @Charanor I installed using react native upgrade guide when upgrading to 0.62
    – MJ Studio
    Commented Jun 1, 2020 at 1:29
  • It seems they removed Flipper from react-native
    – AmerllicA
    Commented Jun 10 at 13:59
16

Instead of Cmd+M, for Android Emulator Press F10 in Windows. The emulator starts to show all the react-native debug options.

image

1
  • F10 not working in case of physical device Commented Apr 7, 2021 at 4:49
14

For Android: Ctrl + M (emulator) or Shake the phone (In Device) to reveal menu.

For iOS: Cmd + D or Shake the Phone to reveal menu

Make sure you have chrome.

On the revealed menu select Debug JS Remotely Option.

Chrome will be opened automatically at localhost:8081/debugger-ui. You can also manually go to debugger with this link.

There reveal console and you can see logs being noted.

12
adb logcat *:S ReactNative:V ReactNativeJS:V

run this in terminal for android log.

2
  • osx: adb logcat '*:S' ReactNative:V ReactNativeJS:V
    – mbunch
    Commented Jan 2, 2019 at 17:13
  • adb logcat -s ReactNative:V ReactNativeJS:V Commented Aug 20, 2020 at 5:35
11

If you are using Microsoft Visual Code , then install React Native Tools extension. Then you can add break points simply by clicking on the desired line number. Follow these steps to setup and debug app : SETUP RUN

Dont forget to enable Debug JS Remotely in emulator if you using it.

9

To me the best way to debug on React-Native is by using "Reactotron".

Install Reactotron then add these to your package.json:

"reactotron-apisauce": "^1.1.2",
"reactotron-react-native-under-37": "^1.1.2",
"reactotron-redux": "^1.1.2", 

now, it just the matter of logging in your code. e.g.: console.tron.log('debug')

9
  1. Run your app in simulator - react-native run-ios
  2. Press ctrl + d and click on Debug JS Remotely

enter image description here

  1. webpage should open up at http://localhost:8081/debugger-ui , if not type the URL and go to this link in Chrome
  2. Right click on the page and click Inspect and it should open the developer tools for chrome

enter image description here

  1. Go to the sources in the top menu and find your js class file in the right hand side file explorer

  2. You can put breakpoints to the view and debug the code in there as you can see in the image.

9

First in your ios simulator, if you press [command + D] key then you can see this screen.

enter image description here

Then click Debug JS remotely button.

After you might see React Native Debugger page like this.

enter image description here

And then open your inspector[f12], and go to console tab debug it! :)

7

If you want to enable debugging by default:

import { NativeModules } from 'react-native';

if (__DEV__) {
  NativeModules.DevSettings.setIsDebuggingRemotely(true)
}

To get this working on Android:

npm install --save react-native-devsettings-android
react-native link react-native-devsettings-android

Reference: Launch a React Native app with “Debug JS Remotely” enabled by default

4
  • In specific place I should put those 4 lines? In App.js or index.js? Commented Oct 24, 2019 at 18:23
  • @JulienLamarche Put in App.js Commented Oct 24, 2019 at 19:37
  • that should be accepted as answer .... why too believe in commands ..... Commented Apr 27, 2020 at 5:43
  • This is what I was looking for! Thanks. Commented Sep 29, 2020 at 16:45
6

By default, my ios simulator wasn't picking up the keystrokes which is why cmd-D didn't work. I had to turn on the settings for the keyboard using simulator's menu:

Hardware > Keyboard > Connect Keyboard

Now cmd-D launches chrome debugging.

6

For android app .Press Ctrl+M select debug js remotely it will open a new window in chrome with url http://localhost:8081/debugger-ui. You can now debug the app in chrome browser

5

Having a space in the file path prevents the Cmd+D from working. I moved my project to a location without a space and I finally got the Chrome debugger to work. Seems like a bug.

5

You can use Safari to debug the iOS version of your app without having to enable "Debug JS Remotely", Just follow the following steps:

1. Enable Develop menu in Safari: Preferences → Advanced → Select "Show Develop menu in menu bar"
2. Select your app's JSContext: Develop → {Your Simulator} → Automatically Show Web Inspector for JS JSContext
3. Safari's Web Inspector should open which has a Console and a Debugger
4

Very simple just two commands

For IOS $ react-native log-ios
For Android $ react-native log-android
2
  • this is the way that I do it!
    – Zach Cook
    Commented Sep 3, 2017 at 20:53
  • This is a super great way to see what is going on with your store
    – Daan
    Commented Sep 2, 2018 at 20:16
4
  1. If you are using emulator use Ctrl+M & simulator Cmd+D

  2. Click on the - Debug js remotely

  3. Google Chrome go to console

4

Assuming you want to show this menu on Android emulator enter image description here

  • Then, try ⌘+m to pop up this dev settings dialog on Android emulator on a Mac.

  • If it doesn't show then go to AVD > (click the pen to edit your emulator configuration) > advanced settings > check the enable keyboard input box. enter image description here

  • And then retry ⌘+m.

  • If it doesn't show still then go to the running emulator settings and on the Send keyboard shortcuts to combobox/dropdown then select the Emulator controls (default) option.

enter image description here

  • And then retry ⌘+m.

  • I hope this helps, it worked for me.

4

If you're using Redux, I highly recommend React Native Debugger. It includes Chrome devtools, but also has Redux devtools and React devtools.

Redux Devtools: This allows you to view your actions, and step back and forth through them. It also allows you to view your redux store and has a feature to automatically diff the previous state with the updated state for each action, so you can see that as you step back and forth through a series of actions.

React Devtools: This allows you to inspect a certain component, namely all of it's props as well as it's component state. If you have a piece of the component state which is a boolean, it lets you click it to toggle it and see how your app reacts when it changes. Great feature.

Chrome Devtools Allows you to see all your console outputs, use breakpoints, pause on debugger; etc. Standard debugging features. If you right click the area where your actions are listed in Redux Devtools and select 'Allow Network Inspect', you can then inspect your API calls in the network tab of Chrome Devtools which is sweet.

In conclusion having these all in one place is fantastic! If you don't need one of them you can toggle it on/off. Get React Native Debugger and enjoy life.

4

In React-Native debugging is much easier.

  • To debug in IOS use

cmd + d

ctrl + cmd + z ( For simulator )

  • To debug in android

Shake device with touch ( Make sure your developer option is enable )

1
4

This is the alternate way to use react native debugger application.

you can download application using below link it's very good application for managing redux store along with the source code.

react-native-debugger

as well now a days you may directly use below link for help you out.

chrome-developer-tools

3

Step 1: Place debugger where ever you want to stop script, like:

  async saveItem(item, selectedValue) {
    debugger
    try {
        await AsyncStorage.setItem(item, selectedValue);
    }
    catch (error) {
        console.error('AsyncStorage error: ' + error.message);
    }
}

This will pause the debugger when ever control comes to this block of code.

Step 2: Press Cmd+D on ios emulator and Cmd+M on Android simulator. If you are having real device, shake the device to open dev menu, if you don't want to shake device follow this blog

Step 3: Select Enable Remote JS Debugging, this will open Chrome

enter image description here

Step 4: Select Developer Tools.

enter image description here

Step 5: Your debugger is paused in Sources tab wherever you have written debugger within your code . Go to console and type any parameters you want to debug (that are present in the code block) like: enter image description here To move to next debugger point again move to Sources -> click on Resume script execution button (Right corner blue button)

Place the debugger, wherever you wanna pause the script.

Enjoy debugging!!

0
2

There is also a very good debuger name Reactotron. https://github.com/infinitered/reactotron

You don't have to be in debug mode to see some data value and there is a lot of option.

go have a look that is really usefull. ;)

1
  • Thank you! We were using RN 0.59 which didn't seem to be compatible with Flipper. Commented Jun 16, 2020 at 14:58

Not the answer you're looking for? Browse other questions tagged or ask your own question.