Определение бесконечного предупреждения рекурсии в R - PullRequest
0 голосов
/ 10 апреля 2019

Когда я запускаю свое приложение Shiny в RStudio, я получаю это предупреждение:

Warning: Error in : evaluation nested too deeply: infinite recursion / 
options(expressions=)?
  90: <Anonymous>

Я попытался превратить предупреждение в ошибку, чтобы я мог увидеть его с

options(warn = 2)

но затем происходит сбой RStudio с «Фатальной ошибкой».

Я попытался выполнить следующие шаги:

https://support.rstudio.com/hc/en-us/community/posts/207601737-How-to-debug-a-fatal-error-

, чтобы присоединить lldb к процессу R, чтобы ямог видеть собственную трассировку стека, но присоединение к процессу R также вызывает сбой RStudio с «фатальной ошибкой».

Я перезапустил мой сеанс R и перезапустил RStudio безрезультатно.

Мои настройки:

RStudio version 1.1.463
Debug -> On Error -> √ Error Inspector 
Tools -> Global Options
    [ ] Use debug error handler only when my code contains errors
Tools -> Global Options
    [ ] Automatically expand tracebacks in error inspector

Как увидеть хотя бы часть трассировки стека рекурсии?

1 Ответ

0 голосов
/ 10 апреля 2019

Чтобы увидеть все вызываемые функции, мы можем добавить трассировку для каждой функции в глобальной области видимости. Я разместил это перед моим звонком на shinyApp(...):

# ... files sourced here ... 

globalEnv <- globalenv()
# for some reason, this needs to be skipped
# or else we get an error about no stack trace
funcsToSkip <- c('server')
for (varName in ls(envir = globalEnv)) {
  if (varName %in% funcsToSkip) next
  varValue <- get(varName, envir = globalEnv)
  if (all(class(varValue) == "function")) {
    message(paste0("Tracing '", varName, "'"))
    trace(varName, where = globalEnv)
  }
}

shinyApp(...)

Это позволяет мне видеть, где оно повторяется бесконечно.

...