在 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。
- VSCode: 1.32.3
- OS: Windows 10 专业, 1709
- Docker 桌面版:2.1.0.5 社区稳定版
- Docker: 19.03.5
- Ruby: 2.6.5
程序如下:
- 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"
- 我在 VScode 中开始调试,Puma 启动。
- 我操作应用。
- 断点不起作用。
然而,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
我正在尝试使用 Visual Studio 代码在 Docker 容器中远程调试 Ruby(在 Rails)代码。
我的机器上没有安装 Ruby,只是在 Docker。
- VSCode: 1.32.3
- OS: Windows 10 专业, 1709
- Docker 桌面版:2.1.0.5 社区稳定版
- Docker: 19.03.5
- Ruby: 2.6.5
程序如下:
- 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" - 我在 VScode 中开始调试,Puma 启动。
- 我操作应用。
- 断点不起作用。
然而,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