| title | Debugging - Getting Started |
|---|---|
| layout | docs.hbs |
This guide will help you get started debugging your Node.js apps and scripts.
NOTE: The --inspect option and Inspector Protocol are experimental and may change.
When started with the --inspect switch, a Node.js process listens via WebSockets
for diagnostic commands as defined by the Inspector Protocol,
by default at host and port 127.0.0.1:9229. Each process is also assigned a
unique UUID (e.g. 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e).
Inspector clients must know and specify host address, port, and UUID to connect
to the WebSocket interface. The full URL is
ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e, of course dependent
on actual host and port and with the correct UUID for the instance.
Inspector also includes an HTTP endpoint to serve metadata about the debuggee,
including its WebSocket URL, UUID, and Chrome DevTools URL. Get this metadata
by sending an HTTP request to http://[host:port]/json/list. This returns a
JSON object like the following; use the webSocketDebuggerUrl property as the
URL to connect directly to Inspector.
{
"description": "node.js instance",
"devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e",
"faviconUrl": "https://nodejs.org/static/favicon.ico",
"id": "0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e",
"title": "node",
"type": "node",
"url": "file://",
"webSocketDebuggerUrl": "ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e"
}A Node.js process started without --inspect can also be instructed to start
listening for debugging messages by signaling it with SIGUSR1 (on Linux and
OS X). As of Node 7 this activates the legacy Debugger API; in Node 8 and later
it will activate the Inspector API.
Several commercial and open source tools can connect to Node's Inspector. Basic info on these follows:
- CLI Debugger supported by the Node.js Foundation which uses the Inspector Protocol.
- A version is bundled with Node and can be used with
node inspect myscript.js. - The latest version can also be installed independently (e.g.
npm install -g node-inspect) and used withnode-inspect myscript.js.
Chrome DevTools 55+
- Option 1: Open
chrome://inspectin a Chromium-based browser. Click the Configure button and ensure your target host and port are listed. - Option 2: Copy the
devtoolsFrontendUrlfrom the output of/json/list(see above) or the --inspect hint text and paste into Chrome.
VS Code 1.10+
- In the Debug panel, click the settings icon to open
.vscode/launch.json. Select "Node.js" for initial setup.
JetBrains WebStorm 2017.1+ and other JetBrains IDEs
- Create a new Node.js debug configuration and hit Debug.
--inspectwill be used by default for Node.js 7+. To disable uncheckjs.debugger.node.use.inspectin the IDE Registry.
- Library to ease connections to Inspector Protocol endpoints.
The following table lists the impact of various runtime flags on debugging:
| Flag | Meaning |
|---|---|
| --inspect |
|
| --inspect=port |
|
| --inspect-brk |
|
| --inspect-brk=port |
|
node inspect script.js |
|
The legacy debugger has been deprecated as of Node 7.7.0. Please use --inspect and Inspector instead.
When started with the --debug or --debug-brk switches in version 7 and
earlier, Node.js listens for debugging commands defined by the discontinued
V8 Debugging Protocol on a TCP port, by default 5858. Any debugger client
which speaks this protocol can connect to and debug the running process; a
couple popular ones are listed below.
The V8 Debugging Protocol is no longer maintained or documented.
Start node debug script_name.js to start your script under Node's builtin
command-line debugger. Your script starts in another Node process started with
the --debug-brk option, and the initial Node process runs the _debugger.js
script and connects to your target.
Debug your Node.js app with Chrome DevTools by using an intermediary process which translates the Inspector Protocol used in Chromium to the V8 Debugger protocol used in Node.js.