Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remote debug Node JS with PHPStorm?

I have a windows box and a VM running CentOS. Does anyone happen to know how I can debug a node CLI script (which doesn't open a port) using PHPStorm? The "edit configuration" seems to only support connecting somewhere instead of listening for incoming connections.

like image 367
Fluffy Avatar asked Dec 09 '11 12:12

Fluffy


People also ask

Does PhpStorm support node JS?

Using Node.PhpStorm lets you run and debug Node. js applications using Node. js on Windows Subsystem for Linux.

How do I use breakpoints in PhpStorm?

Set method breakpointsClick the gutter at the line where the method is declared. Alternatively, place the caret at the line and press Ctrl+F8 . Alternatively, do the following: Press Ctrl+Shift+F8 or select Run | View Breakpoints from the main menu.

Can we use debugger in node JS?

Node. js allows the following commands to use a debugger: c or cont : Continue execution to the next breakpoint or to the end of the program. n or next : Move to the next line of code.


2 Answers

Make sure you have the nodejs plugin installed.

If your server has the balancer package available (my EC2 box didn't), you can use this tutorial to forward the port with balancer.

yum install balance -yt
balance -df 8585 127.0.0.1.5858

Many report success with an iptables redirect from eth0 to lo (didn't work for me) like this:

iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 5858 -j DNAT --to 127.0.0.1:5858

There is also a simple node script described in this eclipse debugging tut (near the bottom), that will tunnel your local debug to a remote host.

But once I was that far down the path, I didn't see the point as I'm familiar with SSH. So ultimately, I went with an SSH tunnel and set up PHPStorm to debug localhost. SSH Tunnel using putty

PHPStorm configuration

like image 119
Kato Avatar answered Oct 25 '22 01:10

Kato


For non-Windows users, here is how to setup the port forwarding tunnel using ssh:

ssh -f ssh_user@your-remote-host -L local_port:localhost:port_on_remote -N

This means "ssh to your-remote-host, login as ssh_user. Once there open connection to localhost:port_on_remote and expose this connection at local_port of machine where ssh is run".

The non-obvious piece is you need to use localhost, since Node's debugger only binds itself to localhost ip address (and not to address to which your-remote-host would resolve).

Example with real values:

ssh -f [email protected] -L 5858:localhost:5858 -N

(based on this howto, just took me some time to figure out the localhost piece).

like image 45
Michal Avatar answered Oct 25 '22 03:10

Michal