<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="clouddebugger_v2.html">Cloud Debugger API</a> . <a href="clouddebugger_v2.controller.html">controller</a> . <a href="clouddebugger_v2.controller.debuggees.html">debuggees</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="clouddebugger_v2.controller.debuggees.breakpoints.html">breakpoints()</a></code>
</p>
<p class="firstline">Returns the breakpoints Resource.</p>

<p class="toc_element">
  <code><a href="#register">register(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Registers the debuggee with the controller service.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="register">register(body=None, x__xgafv=None)</code>
  <pre>Registers the debuggee with the controller service.

All agents attached to the same application must call this method with
exactly the same request content to get back the same stable `debuggee_id`.
Agents should call this method again whenever `google.rpc.Code.NOT_FOUND`
is returned from any controller method.

This protocol allows the controller service to disable debuggees, recover
from data loss, or change the `debuggee_id` format. Agents must handle
`debuggee_id` value changing upon re-registration.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to register a debuggee.
    &quot;debuggee&quot;: { # Represents the debugged application. The application may include one or more # Required. Debuggee information to register.
        # The fields `project`, `uniquifier`, `description` and `agent_version`
        # of the debuggee must be set.
        # replicated processes executing the same code. Each of these processes is
        # attached with a debugger agent, carrying out the debugging commands.
        # Agents attached to the same debuggee identify themselves as such by using
        # exactly the same Debuggee message value when registering.
      &quot;sourceContexts&quot;: [ # References to the locations and revisions of the source code used in the
          # deployed application.
        { # A SourceContext is a reference to a tree of files. A SourceContext together
            # with a path point to a unique revision of a single file or directory.
          &quot;git&quot;: { # A GitSourceContext denotes a particular revision in a third party Git # A SourceContext referring to any third party Git repo (e.g. GitHub).
              # repository (e.g. GitHub).
            &quot;revisionId&quot;: &quot;A String&quot;, # Git commit hash.
                # required.
            &quot;url&quot;: &quot;A String&quot;, # Git repository URL.
          },
          &quot;gerrit&quot;: { # A SourceContext referring to a Gerrit project. # A SourceContext referring to a Gerrit project.
            &quot;gerritProject&quot;: &quot;A String&quot;, # The full project name within the host. Projects may be nested, so
                # &quot;project/subproject&quot; is a valid project name.
                # The &quot;repo name&quot; is hostURI/project.
            &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
              &quot;name&quot;: &quot;A String&quot;, # The alias name.
              &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
            },
            &quot;hostUri&quot;: &quot;A String&quot;, # The URI of a running Gerrit instance.
            &quot;revisionId&quot;: &quot;A String&quot;, # A revision (commit) ID.
            &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
          },
          &quot;cloudRepo&quot;: { # A CloudRepoSourceContext denotes a particular revision in a cloud # A SourceContext referring to a revision in a cloud repo.
              # repo (a repo hosted by the Google Cloud Platform).
            &quot;revisionId&quot;: &quot;A String&quot;, # A revision ID.
            &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
            &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo.
              &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                  # (e.g. winged-cargo-31) and a repo name within that project.
                &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
              },
              &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
            },
            &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
              &quot;name&quot;: &quot;A String&quot;, # The alias name.
              &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
            },
          },
          &quot;cloudWorkspace&quot;: { # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot. # A SourceContext referring to a snapshot in a cloud workspace.
            &quot;workspaceId&quot;: { # A CloudWorkspaceId is a unique identifier for a cloud workspace. # The ID of the workspace.
                # A cloud workspace is a place associated with a repo where modified files
                # can be stored before they are committed.
              &quot;name&quot;: &quot;A String&quot;, # The unique name of the workspace within the repo.  This is the name
                  # chosen by the client in the Source API&#x27;s CreateWorkspace method.
              &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo containing the workspace.
                &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                    # (e.g. winged-cargo-31) and a repo name within that project.
                  &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                  &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                },
                &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
              },
            },
            &quot;snapshotId&quot;: &quot;A String&quot;, # The ID of the snapshot.
                # An empty snapshot_id refers to the most recent snapshot.
          },
        },
      ],
      &quot;labels&quot;: { # A set of custom debuggee properties, populated by the agent, to be
          # displayed to the user.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;project&quot;: &quot;A String&quot;, # Project the debuggee is associated with.
          # Use project number or id when registering a Google Cloud Platform project.
      &quot;isDisabled&quot;: True or False, # If set to `true`, indicates that the agent should disable itself and
          # detach from the debuggee.
      &quot;uniquifier&quot;: &quot;A String&quot;, # Uniquifier to further distinguish the application.
          # It is possible that different applications might have identical values in
          # the debuggee message, thus, incorrectly identified as a single application
          # by the Controller service. This field adds salt to further distinguish the
          # application. Agents should consider seeding this field with value that
          # identifies the code, binary, configuration and environment.
      &quot;description&quot;: &quot;A String&quot;, # Human readable description of the debuggee.
          # Including a human-readable project name, environment name and version
          # information is recommended.
      &quot;extSourceContexts&quot;: [ # References to the locations and revisions of the source code used in the
          # deployed application.
        { # An ExtendedSourceContext is a SourceContext combined with additional
            # details describing the context.
          &quot;context&quot;: { # A SourceContext is a reference to a tree of files. A SourceContext together # Any source context.
              # with a path point to a unique revision of a single file or directory.
            &quot;git&quot;: { # A GitSourceContext denotes a particular revision in a third party Git # A SourceContext referring to any third party Git repo (e.g. GitHub).
                # repository (e.g. GitHub).
              &quot;revisionId&quot;: &quot;A String&quot;, # Git commit hash.
                  # required.
              &quot;url&quot;: &quot;A String&quot;, # Git repository URL.
            },
            &quot;gerrit&quot;: { # A SourceContext referring to a Gerrit project. # A SourceContext referring to a Gerrit project.
              &quot;gerritProject&quot;: &quot;A String&quot;, # The full project name within the host. Projects may be nested, so
                  # &quot;project/subproject&quot; is a valid project name.
                  # The &quot;repo name&quot; is hostURI/project.
              &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
                &quot;name&quot;: &quot;A String&quot;, # The alias name.
                &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
              },
              &quot;hostUri&quot;: &quot;A String&quot;, # The URI of a running Gerrit instance.
              &quot;revisionId&quot;: &quot;A String&quot;, # A revision (commit) ID.
              &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
            },
            &quot;cloudRepo&quot;: { # A CloudRepoSourceContext denotes a particular revision in a cloud # A SourceContext referring to a revision in a cloud repo.
                # repo (a repo hosted by the Google Cloud Platform).
              &quot;revisionId&quot;: &quot;A String&quot;, # A revision ID.
              &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
              &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo.
                &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                    # (e.g. winged-cargo-31) and a repo name within that project.
                  &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                  &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                },
                &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
              },
              &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
                &quot;name&quot;: &quot;A String&quot;, # The alias name.
                &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
              },
            },
            &quot;cloudWorkspace&quot;: { # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot. # A SourceContext referring to a snapshot in a cloud workspace.
              &quot;workspaceId&quot;: { # A CloudWorkspaceId is a unique identifier for a cloud workspace. # The ID of the workspace.
                  # A cloud workspace is a place associated with a repo where modified files
                  # can be stored before they are committed.
                &quot;name&quot;: &quot;A String&quot;, # The unique name of the workspace within the repo.  This is the name
                    # chosen by the client in the Source API&#x27;s CreateWorkspace method.
                &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo containing the workspace.
                  &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                      # (e.g. winged-cargo-31) and a repo name within that project.
                    &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                    &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                  },
                  &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
                },
              },
              &quot;snapshotId&quot;: &quot;A String&quot;, # The ID of the snapshot.
                  # An empty snapshot_id refers to the most recent snapshot.
            },
          },
          &quot;labels&quot;: { # Labels with user defined metadata.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
      &quot;status&quot;: { # Represents a contextual status message. # Human readable message to be displayed to the user about this debuggee.
          # Absence of this field indicates no status. The message can be either
          # informational or an error status.
          # The message can indicate an error or informational status, and refer to
          # specific parts of the containing object.
          # For example, the `Breakpoint.status` field can indicate an error referring
          # to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
        &quot;isError&quot;: True or False, # Distinguishes errors from informational messages.
        &quot;description&quot;: { # Represents a message with parameters. # Status message text.
          &quot;format&quot;: &quot;A String&quot;, # Format template for the message. The `format` uses placeholders `$0`,
              # `$1`, etc. to reference parameters. `$$` can be used to denote the `$`
              # character.
              #
              # Examples:
              #
              # *   `Failed to load &#x27;$0&#x27; which helps debug $1 the first time it
              #     is loaded.  Again, $0 is very important.`
              # *   `Please pay $$10 to use $0 instead of $1.`
          &quot;parameters&quot;: [ # Optional parameters to be embedded into the message.
            &quot;A String&quot;,
          ],
        },
        &quot;refersTo&quot;: &quot;A String&quot;, # Reference to which the message applies.
      },
      &quot;isInactive&quot;: True or False, # If set to `true`, indicates that Controller service does not detect any
          # activity from the debuggee agents and the application is possibly stopped.
      &quot;canaryMode&quot;: &quot;A String&quot;, # Used when setting breakpoint canary for this debuggee.
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the debuggee generated by the controller service.
      &quot;agentVersion&quot;: &quot;A String&quot;, # Version ID of the agent.
          # Schema: `domain/language-platform/vmajor.minor` (for example
          # `google.com/java-gcp/v1.1`).
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for registering a debuggee.
    &quot;debuggee&quot;: { # Represents the debugged application. The application may include one or more # Debuggee resource.
        # The field `id` is guaranteed to be set (in addition to the echoed fields).
        # If the field `is_disabled` is set to `true`, the agent should disable
        # itself by removing all breakpoints and detaching from the application.
        # It should however continue to poll `RegisterDebuggee` until reenabled.
        # replicated processes executing the same code. Each of these processes is
        # attached with a debugger agent, carrying out the debugging commands.
        # Agents attached to the same debuggee identify themselves as such by using
        # exactly the same Debuggee message value when registering.
      &quot;sourceContexts&quot;: [ # References to the locations and revisions of the source code used in the
          # deployed application.
        { # A SourceContext is a reference to a tree of files. A SourceContext together
            # with a path point to a unique revision of a single file or directory.
          &quot;git&quot;: { # A GitSourceContext denotes a particular revision in a third party Git # A SourceContext referring to any third party Git repo (e.g. GitHub).
              # repository (e.g. GitHub).
            &quot;revisionId&quot;: &quot;A String&quot;, # Git commit hash.
                # required.
            &quot;url&quot;: &quot;A String&quot;, # Git repository URL.
          },
          &quot;gerrit&quot;: { # A SourceContext referring to a Gerrit project. # A SourceContext referring to a Gerrit project.
            &quot;gerritProject&quot;: &quot;A String&quot;, # The full project name within the host. Projects may be nested, so
                # &quot;project/subproject&quot; is a valid project name.
                # The &quot;repo name&quot; is hostURI/project.
            &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
              &quot;name&quot;: &quot;A String&quot;, # The alias name.
              &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
            },
            &quot;hostUri&quot;: &quot;A String&quot;, # The URI of a running Gerrit instance.
            &quot;revisionId&quot;: &quot;A String&quot;, # A revision (commit) ID.
            &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
          },
          &quot;cloudRepo&quot;: { # A CloudRepoSourceContext denotes a particular revision in a cloud # A SourceContext referring to a revision in a cloud repo.
              # repo (a repo hosted by the Google Cloud Platform).
            &quot;revisionId&quot;: &quot;A String&quot;, # A revision ID.
            &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
            &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo.
              &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                  # (e.g. winged-cargo-31) and a repo name within that project.
                &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
              },
              &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
            },
            &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
              &quot;name&quot;: &quot;A String&quot;, # The alias name.
              &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
            },
          },
          &quot;cloudWorkspace&quot;: { # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot. # A SourceContext referring to a snapshot in a cloud workspace.
            &quot;workspaceId&quot;: { # A CloudWorkspaceId is a unique identifier for a cloud workspace. # The ID of the workspace.
                # A cloud workspace is a place associated with a repo where modified files
                # can be stored before they are committed.
              &quot;name&quot;: &quot;A String&quot;, # The unique name of the workspace within the repo.  This is the name
                  # chosen by the client in the Source API&#x27;s CreateWorkspace method.
              &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo containing the workspace.
                &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                    # (e.g. winged-cargo-31) and a repo name within that project.
                  &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                  &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                },
                &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
              },
            },
            &quot;snapshotId&quot;: &quot;A String&quot;, # The ID of the snapshot.
                # An empty snapshot_id refers to the most recent snapshot.
          },
        },
      ],
      &quot;labels&quot;: { # A set of custom debuggee properties, populated by the agent, to be
          # displayed to the user.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;project&quot;: &quot;A String&quot;, # Project the debuggee is associated with.
          # Use project number or id when registering a Google Cloud Platform project.
      &quot;isDisabled&quot;: True or False, # If set to `true`, indicates that the agent should disable itself and
          # detach from the debuggee.
      &quot;uniquifier&quot;: &quot;A String&quot;, # Uniquifier to further distinguish the application.
          # It is possible that different applications might have identical values in
          # the debuggee message, thus, incorrectly identified as a single application
          # by the Controller service. This field adds salt to further distinguish the
          # application. Agents should consider seeding this field with value that
          # identifies the code, binary, configuration and environment.
      &quot;description&quot;: &quot;A String&quot;, # Human readable description of the debuggee.
          # Including a human-readable project name, environment name and version
          # information is recommended.
      &quot;extSourceContexts&quot;: [ # References to the locations and revisions of the source code used in the
          # deployed application.
        { # An ExtendedSourceContext is a SourceContext combined with additional
            # details describing the context.
          &quot;context&quot;: { # A SourceContext is a reference to a tree of files. A SourceContext together # Any source context.
              # with a path point to a unique revision of a single file or directory.
            &quot;git&quot;: { # A GitSourceContext denotes a particular revision in a third party Git # A SourceContext referring to any third party Git repo (e.g. GitHub).
                # repository (e.g. GitHub).
              &quot;revisionId&quot;: &quot;A String&quot;, # Git commit hash.
                  # required.
              &quot;url&quot;: &quot;A String&quot;, # Git repository URL.
            },
            &quot;gerrit&quot;: { # A SourceContext referring to a Gerrit project. # A SourceContext referring to a Gerrit project.
              &quot;gerritProject&quot;: &quot;A String&quot;, # The full project name within the host. Projects may be nested, so
                  # &quot;project/subproject&quot; is a valid project name.
                  # The &quot;repo name&quot; is hostURI/project.
              &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
                &quot;name&quot;: &quot;A String&quot;, # The alias name.
                &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
              },
              &quot;hostUri&quot;: &quot;A String&quot;, # The URI of a running Gerrit instance.
              &quot;revisionId&quot;: &quot;A String&quot;, # A revision (commit) ID.
              &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
            },
            &quot;cloudRepo&quot;: { # A CloudRepoSourceContext denotes a particular revision in a cloud # A SourceContext referring to a revision in a cloud repo.
                # repo (a repo hosted by the Google Cloud Platform).
              &quot;revisionId&quot;: &quot;A String&quot;, # A revision ID.
              &quot;aliasName&quot;: &quot;A String&quot;, # The name of an alias (branch, tag, etc.).
              &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo.
                &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                    # (e.g. winged-cargo-31) and a repo name within that project.
                  &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                  &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                },
                &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
              },
              &quot;aliasContext&quot;: { # An alias to a repo revision. # An alias, which may be a branch or tag.
                &quot;name&quot;: &quot;A String&quot;, # The alias name.
                &quot;kind&quot;: &quot;A String&quot;, # The alias kind.
              },
            },
            &quot;cloudWorkspace&quot;: { # A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot. # A SourceContext referring to a snapshot in a cloud workspace.
              &quot;workspaceId&quot;: { # A CloudWorkspaceId is a unique identifier for a cloud workspace. # The ID of the workspace.
                  # A cloud workspace is a place associated with a repo where modified files
                  # can be stored before they are committed.
                &quot;name&quot;: &quot;A String&quot;, # The unique name of the workspace within the repo.  This is the name
                    # chosen by the client in the Source API&#x27;s CreateWorkspace method.
                &quot;repoId&quot;: { # A unique identifier for a cloud repo. # The ID of the repo containing the workspace.
                  &quot;projectRepoId&quot;: { # Selects a repo using a Google Cloud Platform project ID # A combination of a project ID and a repo name.
                      # (e.g. winged-cargo-31) and a repo name within that project.
                    &quot;projectId&quot;: &quot;A String&quot;, # The ID of the project.
                    &quot;repoName&quot;: &quot;A String&quot;, # The name of the repo. Leave empty for the default repo.
                  },
                  &quot;uid&quot;: &quot;A String&quot;, # A server-assigned, globally unique identifier.
                },
              },
              &quot;snapshotId&quot;: &quot;A String&quot;, # The ID of the snapshot.
                  # An empty snapshot_id refers to the most recent snapshot.
            },
          },
          &quot;labels&quot;: { # Labels with user defined metadata.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      ],
      &quot;status&quot;: { # Represents a contextual status message. # Human readable message to be displayed to the user about this debuggee.
          # Absence of this field indicates no status. The message can be either
          # informational or an error status.
          # The message can indicate an error or informational status, and refer to
          # specific parts of the containing object.
          # For example, the `Breakpoint.status` field can indicate an error referring
          # to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.
        &quot;isError&quot;: True or False, # Distinguishes errors from informational messages.
        &quot;description&quot;: { # Represents a message with parameters. # Status message text.
          &quot;format&quot;: &quot;A String&quot;, # Format template for the message. The `format` uses placeholders `$0`,
              # `$1`, etc. to reference parameters. `$$` can be used to denote the `$`
              # character.
              #
              # Examples:
              #
              # *   `Failed to load &#x27;$0&#x27; which helps debug $1 the first time it
              #     is loaded.  Again, $0 is very important.`
              # *   `Please pay $$10 to use $0 instead of $1.`
          &quot;parameters&quot;: [ # Optional parameters to be embedded into the message.
            &quot;A String&quot;,
          ],
        },
        &quot;refersTo&quot;: &quot;A String&quot;, # Reference to which the message applies.
      },
      &quot;isInactive&quot;: True or False, # If set to `true`, indicates that Controller service does not detect any
          # activity from the debuggee agents and the application is possibly stopped.
      &quot;canaryMode&quot;: &quot;A String&quot;, # Used when setting breakpoint canary for this debuggee.
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier for the debuggee generated by the controller service.
      &quot;agentVersion&quot;: &quot;A String&quot;, # Version ID of the agent.
          # Schema: `domain/language-platform/vmajor.minor` (for example
          # `google.com/java-gcp/v1.1`).
    },
    &quot;agentId&quot;: &quot;A String&quot;, # A unique ID generated for the agent.
        # Each RegisterDebuggee request will generate a new agent ID.
  }</pre>
</div>

</body></html>