在 Docker 容器上远程调试时无法使用 Visual Studio 代码在任何断点处中断

Can't break on any breakpoint with Visual Studio code while remote debugging on Docker container

我正在尝试使用 Visual Studio 代码在 Docker 容器中远程调试 Ruby(在 Rails)代码。

我的机器上没有安装 Ruby,只是在 Docker。



程序如下:

  1. Docker 容器执行命令 bundle exec rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails s -b 0.0.0.0 然后 "Fast Debugger (ruby-debug-ide 0.7.0.beta7, debase 0.2.3.beta3, file filtering is supported) listens on 0.0.0.0:1234"
  2. 我在 VScode 中开始调试,Puma 启动。
  3. 我操作应用。
  4. 断点不起作用。

然而,VSCode表示我暂停调试时正在执行的行。之后我可以跨过,VARIABLES、WATCH 和 CALL STACK 正在工作。

似乎只有 BREAKPOINTS 不起作用。


这是我的文件(片段):

launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for rdebug-ide",
      "type": "Ruby",
      "request": "attach",
      "cwd": "${workspaceRoot},
      "remoteHost": "10.0.75.1",
      "remotePort": "1234",
      "remoteWorkspaceRoot": "/var/work/app",
      "showDebuggerOutput": true,
    }
  ]
}

docker-compose.yml:

services:
  app:
    build: "./app"
    depends_on:
      - db
    ports:
      - "3000:3000"
      - "1234:1234"
      - "26162:26162"
    volumes:
      - "./app:/var/work"
    stdin_open: true
    tty: true

Gemfile.lock:

ruby-debug-ide (0.7.0)
debase (0.2.4.1)

在您的 launch.json 中,您可能需要添加 bundle 和 RdebugIde 的路径。类似于:

{
        "name": "Debug Rails server",
        "type": "Ruby",
        "request": "launch",
        "cwd": "${workspaceRoot}",
        "useBundler": true,
        "pathToBundler": "/path/to/rubygem/wrappers/bundle",
        "pathToRDebugIDE": "/path/to/rubygem/gems/ruby-debug-ide-x.x.x/bin/rdebug-ide",
        "program": "${workspaceRoot}/bin/rails",
        "args": [
            "server",
            "-p",
            "3000"
        ]
    }

并调试一项规范:

{
        "name": "Debug RSpec - open spec file",
        "type": "launch",
        "request": "attach",
        "cwd": "${workspaceRoot}",
        "useBundler": true,
        "pathToBundler": "/path/to/rubygem/wrappers/bundle",
        "pathToRDebugIDE": "/path/to/rubygem/gems/ruby-debug-ide-x.x.x/bin/rdebug-ide",
        "debuggerPort": "1235",
        "program": "/path/to/rubygem/bin/rspec",
        "args": [
            "${file}"
        ]
    }

更多信息请参考:https://github.com/Microsoft/vscode-recipes/tree/master/debugging-Ruby-on-Rails#bonus

这对我有用。

我的问题已经解决了。

我修改了 launch.json 并且成功了。似乎错误的是 "cmd".
的目录规范 "cmd" 必须设置为 Windows 格式。

供参考,目录结构如下:

product_root
├── .vscode
│   └── launch.json
├── product
│   ├── rails_root
│   │   ├── app
│   │   ├── Gemfile
│   │   ├── etc.
│   └── Dockerfile
└── docker-compose.yml

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for rdebug-ide",
      "type": "Ruby",
      "request": "attach",
      "cwd": "${workspaceRoot}\product\rails_root",
      "remoteHost": "localhost",
      "remotePort": "1234",
      "remoteWorkspaceRoot": "/var/work/rails_root"
    }
  ]
}

docker-compose.yml

services:
  app:
    build: "./product"
    depends_on:
      - db
    ports:
      - "3000:3000"
      - "1234:1234"
      - "26162:26162"
    volumes:
      - "./product:/var/work"
    stdin_open: true
    tty: true