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",
      "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.