这与其他一些问题有关,但我似乎无法理解如何应用答案,因此我提出了一个新问题。
我正在尝试解决一个看起来像这样的代码片段中的不具有信息性的错误:
tryCatch(MainLoop(),
error=function(e) { fatal(lgr, paste('caught fatal error:', as.character(e)));
exit.status <<- 1 })
问题在于错误似乎与嵌入在库函数中的某些内容有关:
Error in nrow(x): (subscript) logical subscript too long
代码中没有nrow
,因为上面的 C 级错误仅适用于一种类型的索引,而这种索引从未出现在我的任何 nrow
调用中。
因此,我真的很想从那个 tryCatch
中获得堆栈跟踪。这是一个类似的问题:
x <- function() { y(); }
y <- function() { z(); }
z <- function() { stop("asdf") }
> x()
Error in z() : asdf
> tryCatch(x(), error=function(e) { print(conditionCall(e)) } )
z()
> tryCatch(x(), error=function(e) { dump.frames() } )
> last.dump
$`tryCatch(x(), error = function(e) {
dump.frames()
})`
<environment: 0x1038e43b8>
$`tryCatchList(expr, classes, parentenv, handlers)`
<environment: 0x1038e4c60>
$`tryCatchOne(expr, names, parentenv, handlers[[1]])`
<environment: 0x1038e4918>
$`value[[3]](cond)`
<environment: 0x1038ea578>
attr(,"error.message")
[1] "asdf"
attr(,"class")
[1] "dump.frames"
如何获取包括对 y()
的调用的堆栈跟踪?我必须停止使用 tryCatch
吗?有更好的方法吗?