精确定位R中的无限递归警告

时间:2019-04-09 22:04:38

标签: r rstudio warnings stack-trace

在RStudio中运行Shiny应用程序时,出现以下警告消息:

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 :(得分:0)

为了查看所有被调用的函数,我们可以向全局范围内的每个函数添加跟踪。我将此放在致电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(...)

这使我可以看到它无限递归的位置。