r - 检查 dump.frames() 的转储时,某些函数参数在 debugger() 中不可用
问题描述
我正在尝试保存一个允许良好调试的完整转储,但我发现一些函数参数(例如,从全局环境评估的那些)没有保存。我创建了一个简化的示例来说明这一点:
covariates <- c("hi", "there", "user")
f <- function (covariates, double_x)
{
stop("HI, ERROR!")
}
g <- function (x)
{
f(covariates, 2*x)
}
options(warn = 1, keep.source = TRUE, show.error.locations = TRUE, error = quote({
cat("\n====================\nERROR HANDLING ROUTINE\n")
dump.frames(dumpto = "last.dump", to.file = TRUE, include.GlobalEnv = TRUE)
}))
g(100)
现在,当我稍后检查转储时(在不同的交互式 R 会话中
重要!),您可以看到一切看起来都很好,但是
covariates
找不到函数的参数:load("last.dump.rda") debugger(last.dump) 消息:f(covariates, 2 * x) 中的错误:您好,错误!可用环境调用: 1: .GlobalEnv 2: g(100) 3: #3: f(covariates, 2 * x) 4: #3: stop("HI, ERROR!")
输入环境编号,或 0 退出选择: 选择:3 在环境中浏览调用:#3:f(covariates, 2 * x) 调用自:debugger.look(ind) Browse[1]> ls() [ 1] "double_x" 浏览[1]> double_x [1] 200 浏览[1]> 协变量错误:找不到对象“协变量”
最后,covariates
变量可以在第一帧找到1: .GlobalEnv
;但是为什么covariates
在函数框架中不可用f
,当它是它的参数时,因此是函数的局部变量f
?这使调试复杂化了很多......还有其他方法可以解决它吗?我并不担心这options(error = recover)
与交互式会话中的方式不同。
PS:这个问题的灵感来自这个答案,展示了如何跟踪错误的好方法。
解决方案
推荐阅读
- python - 找不到 Tkinter 模块
- python - sklearn svm 不合适
- c# - AppInsights 仅保存遥测数据,但不使用 IIS 上托管的 .Net Core Web 应用程序保存日志
- apache - HTAcces 将目录格式重写为查询字符串
- javascript - 用滑动代替跳跃然后改变模式
- python - 从命令提示符执行“Pyinstaller”时出现问题
- java - Copy different types of an array in JAVA
- javascript - 在窗口 onerror 函数内不能修改元素吗?
- python-3.x - Kivy,python:放大或缩小窗口时动态调整文本大小
- python - Pandas - 用不同的索引覆盖值