blob: d05f28df1555081220f8f97a4c10016df2807d01 [file] [log] [blame] [view] [edit]
---
title: Debugging
layout: default
toc: true
---
# Debugging
Add the options in the `Support for debugging NodeJS tests` section from https://github.com/bazelbuild/rules_nodejs/blob/master/common.bazelrc to your project's `.bazelrc` file to add support for debugging NodeJS programs.
Using the `--config=debug` command line option with bazel will set a number of flags that are specified there are useful for debugging. See the comments under `Support for debugging NodeJS tests` for details on the flags that are set.
Use `--config=debug` with `bazel test` as follow,
```
bazel test --config=debug //test:...
```
or with `bazel run`,
```
bazel run --config=debug //test:test1
```
to also turn on the NodeJS inspector agent which will break before any user code starts. You should then see,
```
Executing tests from //test:test1
-----------------------------------------------------------------------------
Debugger listening on ws://127.0.0.1:9229/3f20777a-242c-4d18-b88b-5ed4b3fed61c
For help, see: https://nodejs.org/en/docs/inspector
```
when the test is run.
To inspect with Chrome DevTools 55+, open `chrome://inspect` in a Chromium-based browser and attach to the waiting process.
A Chrome DevTools window should open and you should see `Debugger attached.` in the console.
See https://nodejs.org/en/docs/guides/debugging-getting-started/ for more details.
## Debugging with VS Code
With the above configuration you can use VS Code as your debugger.
You will first need to configure your `.vscode/launch.json`:
```
{
"type": "node",
"request": "attach",
"name": "Attach nodejs_binary",
"internalConsoleOptions": "neverOpen",
"resolveSourceMapLocations": null,
"sourceMapPathOverrides": {
"../*": "${workspaceRoot}/*",
"../../*": "${workspaceRoot}/*",
"../../../*": "${workspaceRoot}/*",
"../../../../*": "${workspaceRoot}/*",
"../../../../../*": "${workspaceRoot}/*",
// do as many levels here as needed for your project
}
```
We use `sourceMapPathOverrides` here to rewrite the source maps produced by `ts_library` so that breakpoints line up with the source maps.
Once configured start your process with
```
bazel run --config=debug //test:test1
```
Then hit `F5` which will start the VS Code debugger with the `Attach nodejs_binary` configuration.
VS Code will immediatenly hit a breakpoint to which you can continue and debug using all the normal debug features provided.