You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在VSCode中调试Docker化Go项目的测试用例?

如何在VSCode中调试Docker化Go项目的测试用例?

我看你已经搭建了Docker Compose的测试服务,但要实现VSCode调试,需要调整Docker配置和VSCode的调试设置,下面分步骤给你梳理清楚:


第一步:更新Dockerfile的test阶段,安装调试工具

要调试Go测试,必须在test镜像里安装Delve调试器。修改你Dockerfile中的test阶段:

FROM base AS test
RUN apk add build-base  # 安装编译依赖,避免调试时编译失败
# 安装Delve调试器
RUN go install github.com/go-delve/delve/cmd/dlv@latest
# 复制Go模块文件
COPY go.* ./
RUN go mod download
# 复制完整源码
COPY . .

第二步:调整Docker Compose的test服务配置

需要开放调试端口,并且把启动命令改成用Delve运行测试(而不是直接go test):

test:
  container_name: hello-world-test
  build:
    context: .
    target: test
  volumes:
    - .:/app
    - gomodcache:/go/pkg/mod
  env_file: .env
  depends_on:
    db:
      condition: service_healthy  # 确保DB完全启动后再运行测试,避免连接失败
  ports:
    - "40000:40000"  # 映射Delve的调试端口,选一个未被占用的即可
  # 用Delve启动测试调试,参数说明:
  # --headless: 后台运行调试器,不占用终端
  # --listen=:40000: 允许外部连接到调试器
  # --api-version=2: 和VSCode调试工具兼容的API版本
  # --accept-multiclient: 允许多个客户端连接(比如VSCode)
  # --continue: 启动后自动运行测试,直到遇到断点
  command: ["dlv", "test", "./...", "-v", "--headless", "--listen=:40000", "--api-version=2", "--accept-multiclient", "--continue"]

第三步:配置VSCode的调试文件

打开VSCode的调试面板,创建或修改.vscode/launch.json,添加远程连接调试的配置:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Docker Test",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "port": 40000,  # 和Compose里映射的调试端口一致
      "host": "localhost",
      "substitutePath": [
        {
          "from": "${workspaceFolder}",  # 本地项目根目录
          "to": "/app"  # 容器里的工作目录,要和Dockerfile的WORKDIR一致
        }
      ]
    }
  ]
}

这里的substitutePath是关键,它能让VSCode把本地代码路径和容器内的代码路径对应起来,确保断点能正确命中。


第四步:执行调试流程

  1. 先启动DB服务并确保它健康
    因为测试依赖DB,先单独启动DB等它初始化完成:

    docker-compose up -d db
    

    可以用docker-compose ps查看状态,直到db的STATUS显示healthy

  2. 启动测试容器并开放端口
    docker-compose run默认不会自动映射端口,所以要加--service-ports参数:

    docker-compose run --service-ports test
    

    运行后会看到类似API server listening at: [::]:40000的输出,说明调试器已经在等待连接了。

  3. 在VSCode中启动调试
    打开调试面板,选择你创建的Attach to Docker Test配置,点击启动按钮。此时VSCode会连接到容器内的Delve进程。

  4. 开始调试
    在你的Go测试代码里设置断点,调试器会在断点处暂停,你可以用VSCode的调试工具栏进行单步执行、查看变量、调用栈等操作。


常见问题排查

  • 断点不命中:检查substitutePath的路径是否完全匹配(比如本地根目录是不是${workspaceFolder},容器内是不是/app);另外确保容器内的代码和本地同步(因为用了volume映射,正常应该同步,有缓存问题可以重启容器)。
  • 连接不上调试器:检查Compose的端口映射是否正确,容器是否正常启动,Delve的监听地址是不是0.0.0.0:40000(我们的命令里--listen=:40000等价于这个,没问题)。
  • DB连接失败:确认depends_onservice_healthy配置生效,或者手动等DB完全启动后再运行测试容器。

按照这个流程操作,应该就能顺利在VSCode里调试Docker容器中的Go测试用例了😉

火山引擎 最新活动