Я использовал R Studio несколько месяцев go и у меня не было проблем с отладчиком, но теперь кажется, что я не могу сломать IDE и показать среду, в которой произошла ошибка. Например, если у меня есть код, разделенный на два файла в рабочем каталоге, вместе с папкой с именем realfolder .
tools.r
savedata <- function (data, path){
stopifnot(class(data) == "data.frame")
write.csv(data, path)
}
analysis.r
source("tools.r")
a = c(1,2,3)
b = c(10,20,30)
d = data.frame(a,b)
savedata(d, './realfolder/d.csv') # call A
savedata(1, './realfolder/d.csv') # call B
savedata(d, './fakefolder/d.csv') # call C
Когда я устанавливаю Debug -> On Error на Разрыв кода , а затем источник analysis.r , возникает ошибка на линии с вызовите B , и остановка срабатывает на stopifnot(class(data) == "data.frame")
, как и ожидалось. Однако среда IDE не останавливается на этой строке, а только показывает сообщение об ошибке:
Error in savedata(1, "./realfolder/d.csv") :
class(data) == "data.frame" is not TRUE
Вызов traceback()
дает всю необходимую информацию, но я помню, что было возможно получить моментальный снимок в то время об ошибке, чтобы увидеть, какие переменные в среде вызывали проблему.
Когда я установил Отладка -> При ошибке на Инспектор ошибок Я получаю интерактивную трассировку, но без перерыва. Если я закомментирую строку с вызовом B , в упакованной функции произойдет ошибка из вызов C, поскольку фальшивая папка не существует. В этом случае даже инспектор ошибок показывает только сообщение об ошибке.
Это нормальное поведение? Можно ли получить эффект browser()
в каждой точке трассировки при возникновении ошибки?
Я использую RStudio версии 1.2.5033