Как настроить R Studio на разрыв в коде - PullRequest
0 голосов
/ 22 марта 2020

Я использовал 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

Ответы [ 2 ]

1 голос
/ 23 марта 2020

поместите это в качестве первой строки вашего скрипта:

options(error = utils::recover)
0 голосов
/ 22 марта 2020

Вы пробовали установить Отладка -> При ошибке -> Взломать код

enter image description here

Я использую RStudio Desktop 1.2.5033

...