To debug a Node.js app in VSCode, create a launch.json file in the .vscode folder by opening the Run and Debug view and selecting Node.js as the environment, then choose "Launch Program" or "Attach" based on your needs, ensuring the program field points to your main file like app.js or server.js. 2. Set breakpoints by clicking the left gutter next to line numbers, and when execution pauses, use the Debug Console, Variables panel, and Call Stack to inspect variables, step through code, and evaluate expressions, making sure the app is launched via the debug configuration and not manually in the terminal. 3. For apps already running on a port, use attach mode by starting the app with node --inspect or npm start --node-options="--inspect", then configure launch.json with request set to "attach" and port 9229, enabling "restart": true to auto-reconnect during restarts, especially useful with nodemon. 4. Debug npm scripts directly by setting runtimeExecutable to "npm" and runtimeArgs to ["run", "start"] in launch.json, allowing npm start or npm test to run under the debugger, ensuring the script doesn’t already include --inspect to avoid port conflicts. Tips include keeping skipFiles set to ["
Debugging a Node.js app in VSCode is straightforward once you set up the environment correctly. Here’s how to do it effectively.

1. Use the Built-in Debugger with a Launch Configuration
The easiest way to debug a Node.js app in VSCode is by creating a launch.json
file in your project’s .vscode
folder.
Steps:

- Open your project in VSCode.
- Go to the Run and Debug view (Ctrl Shift D or Cmd Shift D).
- Click "create a launch.json file" if you don’t have one.
- Choose Node.js as the environment.
- Select "Launch Program" or "Attach" depending on your needs.
A basic launch.json
for launching your app:
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch App", "program": "${workspaceFolder}/app.js", "args": [], "env": { "NODE_ENV": "development" }, "console": "integratedTerminal", "skipFiles": [ "<node_internals>/**" ] } ] }
Replace
app.js
with your main entry file (e.g.,index.js
,server.js
).
Now press F5 or click Run and Debug to start debugging.
2. Set Breakpoints and Inspect Variables
- Click the left gutter (next to line numbers) in any
.js
file to set a breakpoint (a red dot will appear). - When your code hits that line during execution, it will pause.
- Use the Debug Console, Variables panel, and Call Stack to:
- View current variable values.
- Step over, into, or out of functions.
- Evaluate expressions on the fly.
Note: If breakpoints aren’t hit, make sure your app is actually being launched via the debug configuration (not manually in terminal).
3. Debug Apps Running on a Port (Attach Mode)
If your app is already running (e.g., via npm start
), use attach mode.
First, start your app with inspection enabled:
node --inspect app.js # or npm start --node-options="--inspect"
Then use this launch.json
config:
{ "name": "Attach to Node", "type": "node", "request": "attach", "port": 9229, "restart": true, "skipFiles": ["<node_internals>/**"] }
Now click Run and Debug to attach to the running process. The debugger will connect and respect your breakpoints.
Tip: Use
"restart": true
to automatically reconnect if the server restarts (useful withnodemon
).
For nodemon
, start it like:
nodemon --inspect app.js
Then use the same attach config — it will auto-reconnect on restart.
4. Debug npm Scripts Directly
You can debug npm start
, npm test
, etc., directly.
Example launch.json
:
{ "name": "Debug npm start", "type": "node", "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": ["run", "start"], "port": 9229, "console": "integratedTerminal", "skipFiles": ["<node_internals>/**"] }
This runs npm run start
under the debugger. Make sure your package.json
script doesn't use --inspect
already unless you manage ports carefully.
Tips for Smooth Debugging
-
Avoid
skipFiles
confusion: By default, VSCode skips internal Node files. Keep"skipFiles": ["<node_internals>/**"]</node_internals>
unless you’re debugging deep internals. -
Use source maps: If you're using TypeScript or Babel, enable source maps and set
"sourceMaps": true
inlaunch.json
. - Check the output channel: If debugging fails, check the Debug Console or Output > Debug Console for errors.
-
Use
debugger
statements: You can adddebugger
in your code as a manual breakpoint (only works when debugger is attached).
Basically, just set up launch.json
, use breakpoints, and choose between launch or attach based on how your app runs. Once configured, debugging feels seamless.
The above is the detailed content of How to debug a Node.js app in VSCode. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

There are three ways to change the default terminal in VSCode: setting through a graphical interface, editing settings.json file, and temporary switching. First, open the settings interface and search for "terminalintegratedshell" and select the terminal path of the corresponding system; secondly, advanced users can edit settings.json to add "terminal.integrated.shell.windows" or "terminal.integrated.shell.osx" fields and escape the path correctly; finally, you can enter "Terminal:SelectD through the command panel

1. Confirm whether the command is installed 2. Check the terminal shell type 3. Update the PATH environment variable 4. Restart VSCode or terminal. When you enter a command in the VSCode terminal, you should first check whether the command has been installed correctly and can be verified through other terminals of the system; secondly, confirm the shell type used by VSCode and check its configuration file; then make sure that the path where the command is located has been added to the PATH environment variable, and manually add and reload the configuration if necessary; finally close and reopen the terminal or restart VSCode to make the changes take effect.

When the "Timedoutwaitingforthedebuggertoattach" issue occurs, it is usually because the connection is not established correctly in the debugging process. 1. Check whether the launch.json configuration is correct, ensure that the request type is launch or attach and there is no spelling error; 2. Confirm whether the debugger is waiting for the debugger to connect, and add debugpy.wait_for_attach() and other mechanisms; 3. Check whether the port is occupied or firewall restricted, and replace the port or close the occupied process if necessary; 4. Confirm that the port mapping and access permissions are configured correctly in a remote or container environment; 5. Update VSCode, plug-in and debug library versions to solve potential

VSCode workspace is a .code-workspace file that saves project-specific configurations. 1. It supports multi-root directory, debug configuration, shortcut key settings and extension recommendations, and is suitable for managing different needs of multiple projects. 2. The main scenarios include multi-project collaboration, customized development environment and team sharing configuration. 3. The creation method is to save the configuration through the menu File>SaveWorkspaceAs.... 4. Notes include distinguishing between .code-workspace and .vscode/settings.json, using relative paths, and avoiding storing sensitive information.

There are two ways to set environment variables for VSCode terminals on Linux: one is to use the terminal.integrated.env.linux configuration item to define variables that are only used by VSCode; the other is to modify the shell configuration file to take effect globally. 1. In VSCode, add variables such as "MY_VAR":"my_value" by setting the terminal.integrated.env.linux field. This method only affects the VSCode terminal; 2. Modify shell configuration files such as ~/.bashrc or ~/.zshrc and add exportMY

To set debug environment variables in VSCode, you need to use the "environment" array configuration in the launch.json file. The specific steps are as follows: 1. Add "environment" array to the debugging configuration of launch.json, and define variables in key-value pairs, such as API_ENDPOINT and DEBUG_MODE; 2. You can load variables through .env files to improve management efficiency, and use envFile to specify file paths in launch.json; 3. If you need to overwrite the system or terminal variables, you can directly redefine them in launch.json; 4. Note that

To access the settings.json file of VSCode, you can directly open it through the command panel (Ctrl Shift P or Cmd Shift P). The default storage location of the file varies according to the operating system. Windows is in %APPDATA%\Code\User\settings.json, macOS is in $HOME/Library/ApplicationSupport/Code/User/settings.json, Linux is in $HOME/.config/Code/User/

Enable Git automatic pull (autofetch) in VSCode needs to be implemented by configuring Git and VSCode settings. 1. Configure Git to remotely get all branches: execute gitconfig --globalremote.origin.fetch "refs/heads/*:refs/remotes/origin/*". 2. Turn on automatic fetch in VSCode: Set "git.autofetch":true to execute gitfetch regularly. 3. Optional installation extensions such as GitLens or AutoFetchforGit are more powerful
