Debugging a locally running application

With Cloud Code, you can debug your Cloud Run applications locally in a Cloud Run-like environment. You can set breakpoints, step through your code, and debug remote applications running in containers.

Defining your debug configuration

Before you debug your application, you must create your debug configuration:

  1. Navigate to Run/Debug configurations dialog on the top taskbar and click 'Edit Configurations'.
  2. Choose 'Cloud Run: Run Locally' under Cloud Code: Cloud Run.
  3. Click 'OK'.

Debugging your application

To debug your application, follow these steps:

  1. Click the debug action debug action icon for 'Cloud Run: Run Locally' to start the development cycle in debug mode.

    Clicking run on Cloud Run: Run Locally in debug mode

  2. Cloud Code will attach a debug session. Once successful, the Debug Tool window opens, confirming connection (within the Console tab).

  3. Click the gutter at the executable line of the code where you want to add a breakpoint.

    Red filled circles denote active breakpoints, while red-outlined hollow circles signify disabled breakpoints.

  4. To access your running app, click the URL displayed in your Event Log panel.

    When you do, a new request is sent to your application and it pauses at the breakpoint-marked line.

    Event log with successful deployment notification and URL to preview your app

  5. To end the debugging session, click the stop icon on the Cloud Run: Run Locally run configuration.

Configuration Details

Cloud Code, powered by Skaffold under the hood, can help configure your debugging sessions. With Cloud Code, you can set breakpoints and debug remote applications running in containers for the following languages:

Java

Cloud Code will automatically add an environment variable, JAVA_TOOL_OPTIONS, with the appropriate JDWP configuration to enable debugging. If already present, Cloud Code will use existing settings specified in JAVA_TOOL_OPTIONS.

Node.js

Depending on the structure of your application and its image build configuration, you may have to help the debugger map your local sources to the remote sources in the container. This enables the Node debugger to correctly process your breakpoints.

There are two ways to configure this:

  1. Manual Configuration

    Select the 'Cloud Run: Run Locally' Run Configuration from the dropdown and select 'Edit Configurations'. In the 'Debug' tab, configure the source mapping from your local application source to the source location in the remote container.

    Choosing a source location in the source mapping section of the Debug tab

    Configuration options:

    • File/Directory - the local file or directory of your application running on Cloud Run.
    • Remote Path - the path to the file or directory running in the container on Cloud Run.
  2. Automatic Configuration

    You can choose to defer this mapping to Cloud Code. When you start your debug session, Cloud Code will attempt to infer this mapping automatically. It will be presented to you in a dialog; one dialog for each artifact you are debugging.

    Remote path mapping dialog for each artifact specifying remote path being used

    Configuration options:

    • Local path - the local path to the root of the artifact you are debugging.
    • Remote Path - the path to the file or directory running in the container on Cloud Run. You can choose to override this with your own value. If you hit Cancel, then no mapping will be applied.

Go

In order to configure your application for debugging, your app must be:

  • a Go Module-based application.
  • identified as being Go-based by setting one of the standard Go runtime environment variables in the container, such as GODEBUG, GOGC, GOMAXPROCS, or GOTRACEBACK. GOTRACEBACK=single is the default setting for Go, and GOTRACEBACK=all is a generally useful configuration.

Optionally (but recommended), your app should be built with the -gcflags='all=-N -l' options to disable optimizations. Skaffold Profiles are a useful option for this purpose, and can be set with the 'Deployment Profile' field in your Run configuration under the 'Build/Deploy' tab.

For more details, refer to the Skaffold debug documentation.

Getting Support

To send feedback, report issues on GitHub, or ask a question on Stack Overflow.