Interactive debugging of persistent R sessions
The r_session$debug()
method is an interactive debugger to inspect
the stack of the background process after an error.
$debug()
starts a REPL (Read-Eval-Print-Loop), that evaluates R
expressions in the subprocess. It is similar to browser()
and
debugger()
and also has some extra commands:
.help
prints a short help message.
.where
prints the complete stack trace of the error. (The same as
the $traceback()
method.
.inspect <n>
switches the "focus" to frame <n>
. Frame 0 is the
global environment, so .inspect 0
will switch back to that.
To exit the debugger, press the usual interrupt key, i.e. CTRL+c
or
ESC
in some GUIs.
Here is an example session that uses $debug()
(some output is omitted
for brevity):
# ---------------------------------------------------------------------- > rs <- r_session$new() > rs$run(function() knitr::knit("no-such-file")) Error in rs_run(self, private, func, args) : callr subprocess failed: cannot open the connection > rs$debug() Debugging in process 87361, press CTRL+C (ESC) to quit. Commands: .where -- print stack trace .inspect <n> -- inspect a frame, 0 resets to .GlobalEnv .help -- print this message <cmd> -- run <cmd> in frame or .GlobalEnv 3: file(con, "r") 2: readLines(input2, encoding = "UTF-8", warn = FALSE) 1: knitr::knit("no-such-file") at #1 RS 87361 > .inspect 1 RS 87361 (frame 1) > ls() [1] "encoding" "envir" "ext" "in.file" "input" "input.dir" [7] "input2" "ocode" "oconc" "oenvir" "oopts" "optc" [13] "optk" "otangle" "out.purl" "output" "quiet" "tangle" [19] "text" RS 87361 (frame 1) > input [1] "no-such-file" RS 87361 (frame 1) > file.exists(input) [1] FALSE RS 87361 (frame 1) > # <CTRL + C> # ----------------------------------------------------------------------
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.