Cloud Debugger: Node.js Client

release level npm version

This module provides Cloud Debugger support for Node.js applications. Cloud Debugger is a feature of Google Cloud Platform that lets you debug your applications in production without stopping or pausing your application.

A comprehensive list of changes in each version may be found in the CHANGELOG.

Read more about the client libraries for Cloud APIs, including the older Google APIs Client Libraries, in Client Libraries Explained.

Table of contents:

Quickstart

Before you begin

  1. Select or create a Cloud Platform project.
  2. Enable the Cloud Debugger API.
  3. Set up authentication with a service account so you can access the API from your local workstation.

Installing the client library

npm install @google-cloud/debug-agent

Debugger Agent Settings

To customize the behaviour of the automatic debugger agent, specify options when starting the agent. The following code sample shows how to pass in a subset of the available options.

require('@google-cloud/debug-agent').start({
  // .. auth settings ..

  // debug agent settings:
  allowExpressions: true,
  serviceContext: {
    service: 'my-service',
    version: 'version-1'
  },
  capture: { maxFrames: 20, maxProperties: 100 }
});

See the agent configuration for a list of possible configuration options.

Using the Debugger

Once your application is running, use the Debug UI in your Cloud developer console to debug your application. The Debug UI can be found in the 'Operations -> Debug' section in the navigation panel, or by simply searching for 'Debug' in the cloud console.

To take a snapshot with the debugger:

  1. Click in the gutter (line number area) or enter a filename and line number in the snapshot panel
  2. The debugger inserts a momentary breakpoint at the specified location in your code in the running instance of your application.
  3. As soon as that line of code is reached in any of the running instances of your application, the stack traces, local variables, and watch expressions are captured, and your application continues.

Note: The directory layout of the code that is being debugged does not have to exactly match the source code specified in the Debug UI. This is because the debug agent resolves a snapshot filename by searching for a file with the longest matching path suffix. If a unique match is found, that file will be used to set the snapshot.

Firebase Realtime Database backend

The Cloud Debugger API is deprecated and will be turned down in May 2023.

You can use Firebase Realtime Database for data persistence as an alternative.

Enabling the agent

To enable the agent, add the following at the top of your app's main script or entry point:

require('@google-cloud/debug-agent').start({
  useFirebase: true,
  firebaseDbUrl: 'https://my-database-url.firebaseio.com',
  firebaseKeyPath: 'path/to/service_account.json',
});

The following params are optional:

  • firebaseDbUrl - https://PROJECT_ID-cdbg.firebaseio.com will be used if not provided. where PROJECT_ID is your project ID.
  • firebaseKeyPath - Default google application credentials are used if not provided.

Using the Debugger

Using the Debugger with the Firebase Realtime Database backend requires using the Snapshot Debugger CLI.

See the full Snapshot Debugger CLI documentation.

Limitations and Requirements

Note: There is a known issue where enabling the agent may trigger memory leaks. See #811

  • Privacy issues can be created by setting snapshot conditions that watch expressions evaluated in the context of your application. You may be able to view sensitive user data when viewing the values of variables.
  • The debug agent tries to ensure that all conditions and watchpoints you add are read-only and have no side effects. It catches, and disallows, all expressions that may have static side effects to prevent accidental state change. However, it presently does not catch expressions that have dynamic side-effects. For example, o.f looks like a property access, but dynamically, it may end up calling a getter function. We presently do NOT detect such dynamic-side effects.
  • The root directory of your application needs to contain a package.json file.

Samples

Samples are in the samples/ directory. Each sample's README.md has instructions for running its sample.

SampleSource CodeTry it
Appsource codeOpen in Cloud Shell
Snippetssource codeOpen in Cloud Shell

The Cloud Debugger Node.js Client API Reference documentation also contains samples.

Supported Node.js Versions

Our client libraries follow the Node.js release schedule. Libraries are compatible with all current active and maintenance versions of Node.js. If you are using an end-of-life version of Node.js, we recommend that you update as soon as possible to an actively supported LTS version.

Google's client libraries support legacy versions of Node.js runtimes on a best-efforts basis with the following warnings:

  • Legacy versions are not tested in continuous integration.
  • Some security patches and features cannot be backported.
  • Dependencies cannot be kept up-to-date.

Client libraries targeting some end-of-life versions of Node.js are available, and can be installed through npm dist-tags. The dist-tags follow the naming convention legacy-(version). For example, npm install @google-cloud/debug-agent@legacy-8 installs client libraries for versions compatible with Node.js 8.

Versioning

This library follows Semantic Versioning.

This library is considered to be stable. The code surface will not change in backwards-incompatible ways unless absolutely necessary (e.g. because of critical security issues) or with an extensive deprecation period. Issues and requests against stable libraries are addressed with the highest priority.

More Information: Google Cloud Platform Launch Stages

Contributing

Contributions welcome! See the Contributing Guide.

Please note that this README.md, the samples/README.md, and a variety of configuration files in this repository (including .nycrc and tsconfig.json) are generated from a central template. To edit one of these files, make an edit to its templates in directory.

License

Apache Version 2.0

See LICENSE