[英]Visual Studio Code - Remote Debugging Bazel C++ - Unable to read file 'vscode-remote://dev- file
我正在尝试在 docker 中对 bazel 项目进行远程调试。 本地插件:远程开发 Docker 插件(在 devcontainer.json 中定义):ms-vscode.cpptools
我的launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"MIMode": "gdb",
"request": "launch",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"program": "/root/.cache/bazel/_bazel_root/e53bbb0b0da4e26d24b415310219b953/execroot/tf_serving/bazel-out/k8-dbg/bin/tensorflow_serving/fplugin/fserve_cc",
"externalConsole": false,
}
]
}
但是我收到一个错误:
Unable to open 'fserve.cc': Unable to read file 'vscode-remote://dev-container+2f55736572732f6d67756d6f77736b2f776f726b2f6f766d732d63/proc/self/cwd/tensorflow_serving/fplugin/fserve.cc
在本地开发中,我会添加 sourceFileMap,但它似乎不适用于远程 docker 开发。 有任何想法吗?
当您尝试使用 bazel 进行编译时,您将有 4 个软链接(bazel-bin, bazel-{source-folder}, bazel-out, bazel-testlog)修改此属性 wi
"cwd": "${workspaceFolder}/bazel-",
我不确定您的问题是由于远程调试造成的。 我相信无论您是否在远程环境中,以下信息都将起作用。
Bazel 在项目的根文件夹中生成一些包含有用数据的符号链接(更多信息 请参见文档):
bazel-bin
是输出目录中文件夹的符号链接,其中包含为您运行的构建的最新配置生成的代码和二进制文件。bazel-{folder-name}
是 execRoot 的符号链接,这是 bazel 查看项目源代码的方式。 {folder-name}
是您的项目所在文件夹的名称。bazel-out
是 bazel 输出根的符号链接。bazel-testlog
是测试运行输出的符号链接在正确的位置提供VSCode与来源,修改"cwd"
属性中launch.json
到:
"cwd": "${workspaceFolder}/bazel-{folder-name}",`
如果您的程序需要其任何依赖项中的data
属性中的文件,则您正在使用运行文件
首先,将"cwd"
设置为二进制文件的运行文件树的根,然后以将当前工作目录映射到 execRoot 符号链接的方式设置"sourceFileMap"
。 对我来说(在 linux 上), /proc/self/cwd
映射正确,但对你来说可能不是这样。 我能够说我弄错了,因为 VSCode 抱怨无法读取/proc/self/cwd/external/external-project/src/file.cpp
的文件。
"cwd": "${workspaceFolder}/bazel-bin/path/to/executable/executable.runfiles/{workspace-name}`,
"sourceFileMap": {
"/proc/self/cwd": "${workspaceFolder}/bazel-{folder-name}`,
},
{workspace-name}
可以在WORKSPACE
找到,它看起来像workspace(name = "my-project")
。 如果该文件中没有定义工作区名称,则默认为__main__
。
我可能还建议将"program"
属性更改为更方便的位置。 如果您做的最后一件事是使用 bazel 构建二进制文件,则可以在bazel-bin/path/to/executable/executable
找到构建的可执行bazel-bin/path/to/executable/executable
一个完整的例子:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch Debug",
"type": "cppdbg",
"request": "launch",
// path to the most recently built version of executable
// this should be built with `bazel build -c dbg //path/to:executable`
"program": "${workspaceFolder}/bazel-bin/path/to/executable/executable",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/bazel-bin/path/to/executable/executable.runfiles/{workspace-name}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"sourceFileMap": {
"/proc/self/cwd": "${workspaceFolder}/bazel-{folder-name}"
}
}
]
}
这篇有用的帖子(还展示了如何使用tasks.json
自动构建可执行文件)中tasks.json
: https : tasks.json
/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.