The extension vscode-R-debugger adds debugging capabilities for the R programming language to Visual Studio Code and depends on the R package vscDebugger. For further R support in VS Code see e.g. vscode-R and R LSP.
The debugger includes the following features:
print
,
cat
, message
, and str
that also
print a link to the file and line where the text was printed.The latest version of the VS Code extension can be installed from the
marketplace.
After installing the extension, the R package can be installed using the
command r.debugger.updateRPackage
. If this does not work,
you can find the source code and compiled binaries on the releases
site.
The provided packages were built using the latest R release and might be incompatible with older R versions. In these cases it is necessary to build the package from code.
If you want to install a development version, the VS Code extension
can be installed from the .vsix-files found here.
To download the correct file, filter the commits by branch, select the
latest commit, and download the file r-debugger.vsix
under
the caption “Artifacts”. To install the latest development version of
the required R-package from GitHub, run
devtools::install_github("ManuelHentschel/vscDebugger")
or
install from the artifacts found here.
If your R path is neither in the Windows registry nor the
PATH
environment variable, make sure to provide a valid
path to the R executable in r.rpath.xxx
.
R Debugger
as debugger. With the
default launch configuration, the debugger will start a new R
session..GlobalEnv
.library(vscDebugger)
.vsc.listen()
"request":"attach"
, e.g.:For a detailed explanation of possible launch config entries and other settings, see Configuration.
The debugger works as follows:
vscDebugger
is loaded.vscDebugger
to get info about the
stack/variablesThe output of the R process is read and parsed as follows:
vscDebugger
is
encoded as json and sent via a TCP socket. These lines are parsed by the
VS Code extension and not shown to the user.browser()
function is parsed
and used to update the source file/line highlighted inside VS Code.
These lines are also hidden from the user.Packages can now be debugged using load_all
from
pkgload
. To do so, it is required to install
pkgload
(part of devtools
). By default,
load_all
will be masked by a modified version that
automatically sets breakpoints in the loaded package and attaches the
modified versions of print
, cat
,
message
. To always load a package when launching a debug
session, you can specify an array of paths in the launch config entry
"loadPackages"
. This is done (for the currently opened
package) in the example debug config "Debug R-Package"
.
Packages with a more complicated installation that might not be
compatible with load_all
can also be debugged. For this to
work, the proper source information must be retained during the
installation of the package (check
attr(attr(FUNCTION_NAME, 'srcref'), 'srcfile')
for some
function from the package):
.tar.gz
)--with-keep.source
should be setdevtools::install(quick=FALSE, ...)
to compile the binaries
and again with devtools::install(quick=TRUE, ...)
to retain
the source information.The packages that are being debugged then need to be specified in the launch config as follows:
To overwrite the
print
/cat
/message
functions for
an individual package, they need to be explicitly assigned somewhere in
the package:
print <- print
cat <- cat
message <- message
This assignment can be overwritten by the debugger with
.vsc.print
/.vsc.cat
/.vsc.message
,
but has no effect when not using the debugger.
For troubleshooting info, see Troubleshooting
This package is still under development. If you have problems, suggestions, bug fixes etc. feel free to open an issue or submit a pull request. Any feedback or support is appreciated! Special thanks to @tdeenes for providing the C code used in the R package, and @renkun-ken for his numerous contributions and feedback!