Debugging an application

Cloud Code for IntelliJ allows you to easily debug your applications deployed to a Kubernetes cluster. You can debug an application on a local cluster (like minikube or Docker Desktop), GKE, or any other Cloud provider.

Furthermore, with Cloud Code's debugging support, you don't have to worry about any manual setup like setting up port forwarding, installing a debugging backend, or injecting language-specific debug arguments in the right way. All you need is a Cloud Code-ready Kubernetes application that includes a skaffold.yaml configuration file.

Debugging

  1. To start the development cycle in debug mode on your Kubernetes cluster, click the debug action for Develop on Kubernetes run action icon.

    Starting the Kubernetes cluster development cycle in debug mode

    The continuous development cycle initiates in debug mode.

    Cloud Code attaches a debug session:

    Kubernetes debugger attached

  2. You can now perform the tasks you normally do when debugging local code, like setting breakpoints and stepping through code, against a live Kubernetes cluster.

    Kubernetes debugger session

  3. To end the debugging session, click the stop icon on the Develop on Kubernetes Run Configuration.

Configuration details

Cloud Code, powered by Skaffold, 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 automatically adds an environment variable, JAVA_TOOL_OPTIONS, with the appropriate JDWP configuration to enable debugging. If JAVA_TOOL_OPTIONS is already present, Cloud Code uses existing settings specified in JAVA_TOOL_OPTIONS.

Node.js

Depending on the structure of your application and its image build configuration, you might 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.

You can configure this in one of the following ways:

  • Manual configuration

    Select the Develop on Kubernetes Run Configuration from the dropdown and then click Edit Configurations. On 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 Kubernetes.
    • Remote path - the path to the file or directory running in the container on Kubernetes.
  • Automatic configuration

    You can choose to defer this mapping to Cloud Code. When you start your debug session, Cloud Code attempts to infer this mapping automatically. The inferred mapping is 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 Kubernetes. You can choose to override this with your own value. If you click Cancel, no mapping is applied.

Go

To configure your application for debugging, your app must be a Go Module-based application and be 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 on the Build/Deploy tab.

For more details, see the Skaffold debug documentation.

Getting support

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