#r #rstudio #warnings #stack-trace
#r #rstudio #предупреждения #трассировка стека
Вопрос:
Когда я запускаю свое блестящее приложение в 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:
Чтобы увидеть все вызываемые функции, мы можем добавить трассировку для каждой функции в глобальной области видимости. Я поместил это перед моим вызовом 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(...)
Это позволяет мне видеть, где он повторяется бесконечно.