在 Cloud Code for VS Code 中调试 Cloud Run 服务

借助 skaffold debug,Cloud Code for VS Code 可让您轻松调试已部署到 Cloud Run 的应用。如需了解详情,请参阅使用 Skaffold 进行调试。

您无需完成手动设置,例如设置端口转发或注入特定语言的调试参数。调试需要一个支持 Cloud Code 的 Cloud Run 应用,该应用包含 skaffold.yaml 配置文件和一个类型为 cloudcode.cloudrun 的 launch.json 文件。

调试 Cloud Run 服务

如需调试您的服务,请按以下步骤操作:

  1. 如需运行服务并附加调试器会话,请打开命令面板(按 Ctrl/Cmd+Shift+P,或点击 View [视图] > Command Palette [命令面板]),然后运行 Debug on Cloud Run Emulator 命令。

  2. 在“在 Cloud Run 模拟器上运行/调试”(Run/Debug on Cloud Run Emulator) 对话框中,为您的配置设置规范:

    • 选择 Docker 或 Buildpack 作为构建器,然后指定您的 Dockerfile 或 Buildpack。
    • (可选)如需指定 Dockerfile 目标或 build 实参,请点击显示高级 build 设置,然后指定目标或实参。
    • (可选)如需指定自定义服务名称、容器映像网址、容器端口、服务要使用的身份、专用 CPU 数量或要为每个容器实例分配的内存量,请点击显示高级服务设置,然后指定相应值。
    • (可选)如需指定任何环境变量,请点击显示高级服务设置,然后点击环境变量并指定相应的值。
    • (可选)如需指定 Cloud SQL 连接,请点击连接,然后每行指定一个连接。
    • (可选)如需在您保存代码更改后让 VS Code 重新建立调试会话,请选中在更改时自动重新构建和重新运行复选框。

    如果您想进一步自定义服务的运行方式,可以直接修改launch.json 文件。

  3. 如需开始调试服务,请点击调试。

  4. 如果系统提示,请验证您的凭据,以便在本地运行和调试应用。

  5. 对于服务中的每个可调试容器,确认或输入您要调试的程序所在的远程容器目录。

    或者,您也可以按 ESC 跳过容器调试。

    远程根目录提示

    Cloud Code 会为服务中的每个可调试容器连接一个调试会话。

    默认情况下,当您保存对应用的更改时,Cloud Code 会重新部署应用并设置新的调试会话。您可以使用项目的启动配置中的 watch 标志切换此功能。

  6. 如需添加断点,请点击您要调试的文件的编辑器边距。

    红色实心圆表示活跃断点,而灰色空心圆表示已停用的断点。

    如需更精确地控制断点,您可以使用 VS Code 的“Debug”视图中的“Breakpoints”部分。

    “Debug”视图左侧面板中的“Breakpoints”部分,支持添加、移除和停用断点

    当您向服务发送新请求时,服务会在您指定的行处暂停。

  7. 会话完成后,您可以右键点击以使用以下命令:

    • 查看日志:使用 Cloud Code Logs Explorer 打开特定 Deployment 的应用日志
    • 打开网址:在网络浏览器中打开特定服务的应用服务网址
  8. 如果您已在启动配置中关闭手表模式,并且想要更改应用并重新构建和重新部署应用,请点击 Cloud Code 状态栏,然后点击开启手表模式。

  9. 如果您要检查变量和堆栈信息,请使用调试边栏。如需与调试会话进行交互,请使用底部窗格调试器中的调试控制台。

  10. 如需停止部署,请点击当前部署的操作栏中的停止按钮。

    Cloud Run 部署的操作栏

排查容器构建问题

如果您收到 BUILD_DOCKER_UNKNOWN 错误代码,则表示 Docker 存在问题。如需解决此问题,请执行以下一项或多项任务:

  • 重启 Docker,然后尝试重新构建容器。

  • 如果您在重启后仍然收到相同的错误,则可能是 Docker 磁盘可用空间不足。如需详细了解如何在 Docker 中清理未使用的对象,请参阅清理未使用的 Docker 对象。

  • 不妨试试 Docker 的磁盘使用情况扩展程序,以帮助回收空间。

配置详情

Cloud Code 会处理以下特定于语言的配置详细信息:

Node.js

重写要调用的入口点:

node --inspect=localhost:9229

Python

使用 Init 容器安装 ptvsd 模块并重写要调用的入口点:

python -m ptvsd --host localhost --port 5678

Go

使用 init 容器安装 dlv 调试程序并重写入口点,以便启动的调试会话仅使用调试服务器运行(在无头模式下),在启动时继续调试的进程,接受多个客户端连接,并侦听 localhost:56268:

dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

Java

使用适当的 Java 调试连接协议 (JDWP) 配置添加环境 JAVA_TOOLS_OPTIONS,以便 JDWP 调试代理在端口 5005 上侦听套接字连接,并允许虚拟机在连接调试程序之前开始执行:

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

.NET

.NET Core 应用配置为与 vsdbg for VS Code 一起部署。

如果您在自动配置时遇到问题,请参阅调试器的详细配置和设置,以获取问题排查方面的帮助。

获取支持

如需发送反馈,请在 Stack Overflow 上提问。 如果您是 Google Cloud 客户,可以通过标准 Google Cloud 支持渠道提交工单。