Visual Studio Code - Remote Debugging Bazel C++ - Unable to read file 'vscode-remote://dev- file Visual Studio Code - Remote Debugging Bazel C++ - Unable to read file 'vscode-remote://dev- file docker docker

Visual Studio Code - Remote Debugging Bazel C++ - Unable to read file 'vscode-remote://dev- file


when you try to compile with bazel, you will have 4 soft link(bazel-bin, bazel-{source-folder}, bazel-out, bazel-testlog)modify this attribute wi

"cwd": "${workspaceFolder}/bazel-",


I'm not sure that your problem is due to remote debugging. I believe that the following info will work whether or not you're in a remote environment.

Bazel generates a few symlinks in your project's root folder that contain useful data (for more see the docs):

  • bazel-bin is a symlink to a folder in the output directory that contains generated code and binaries for the latest configuration of the build you've run.
  • bazel-{folder-name} is a symlink to the execRoot, which is how bazel sees your project's source code. {folder-name} is the name of the folder your project is in.
  • bazel-out is a symlink to bazel's output root.
  • bazel-testlog is a symlink to the outputs from test runs

If you're not using bazel's runfiles library

To provide VSCode with sources at the right location, modify the "cwd" attribute in launch.json to:

"cwd": "${workspaceFolder}/bazel-{folder-name}",`

If you are using runfiles

You're using runfiles if your program requires files in a data attribute in any of its dependencies

First, set "cwd" to the root of the runfiles tree for your binary, and then set "sourceFileMap" in a way that maps the current working directory to the execRoot symlink. For me (on linux), /proc/self/cwd maps correctly, but that might not be true for you. I was able to tell that I got it wrong because VSCode complained about being unable to read a file at /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} can be found in WORKSPACE, it will look like workspace(name = "my-project"). If there is no workspace name defined in that file, it defaults to __main__.

I might also recommend changing the "program" attribute to a more convenient location. If the last thing you did was build your binary with bazel, you can find the built executable at bazel-bin/path/to/executable/executable

A full example:

{    "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}"            }        }    ]}

Most of this is covered in this useful post (which also shows how to automatically build your executable using tasks.json):https://shanee.io/blog/2019/05/28/bazel-with-visual-studio-code/