当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R traceback 获取并打印调用堆栈


R语言 traceback 位于 base 包(package)。

说明

默认情况下,traceback() 打印最后一个未捕获错误的调用堆栈,即导致错误的调用序列。当发生错误且错误消息无法识别时,这非常有用。它还可用于打印当前堆栈或任意调用列表。

.traceback() 现在返回上述调用堆栈(并且 traceback(x, *) 可以被视为打印 .traceback(x) 结果的便捷函数)。

用法

 traceback(x = NULL, max.lines = getOption("traceback.max.lines",
                                           getOption("deparse.max.lines", -1L)))
.traceback(x = NULL, max.lines = getOption("traceback.max.lines",
                                           getOption("deparse.max.lines", -1L)))

参数

x

NULL (默认值,表示 .Traceback ),或当前堆栈中要跳过的调用的整数计数,或调用的列表或对列表。查看详情。

max.lines

一个数字,每次调用要打印的最大行数。默认无限制。仅当 xNULLlistpairlist 调用时适用,请参阅详细信息。

细节

默认显示的是最后一个未捕获错误的堆栈,作为 .Traceback 中的 call 列表存储,traceback 以用户友好的格式打印。调用堆栈始终包含所有函数调用和所有外部函数调用(例如 .Call ):如果正在进行分析,它将包括对某些原始函数的调用。 (包括对内置函数的调用,但不包括对特殊函数的调用。)

通过 trytryCatch 捕获的错误不会生成回溯,因此打印的是最后一个未捕获错误的调用序列,而不一定是最后一个错误的调用序列。

如果x 是数字,则打印当前堆栈,跳过堆栈顶部的x 条目。例如,options(error = function() traceback(3)) 将打印错误发生时的堆栈,跳过对 traceback().traceback() 的调用以及调用它的错误函数。

否则,x 被假定为调用或解析调用的列表或配对列表,并将以相同的方式显示。

.traceback() 以及扩展的 traceback() 可能会触发 call 的解析。对于大型调用来说,这是一项昂贵的操作,因此当此类调用位于调用堆栈上时,建议将 max.lines 设置为合理的值。

.traceback() 以列表或配对列表的形式返回解析的调用堆栈最深的调用。可以通过 max.lines 限制从调用中解析的行数。 max.lines 导致输出被截断的调用将获得 "truncated" 属性。

traceback() 以不可见方式格式化、打印并返回 .traceback() 生成的调用堆栈。

警告

.Traceback 的存储位置没有记录,也不可见,并且可能会发生变化。目前 .Traceback 包含 call 作为语言对象。

例子

foo <- function(x) { print(1); bar(2) }
bar <- function(x) { x + a.variable.which.does.not.exist }
## Not run: 
foo(2) # gives a strange error
traceback()
## End(Not run)
## 2: bar(2)
## 1: foo(2)
bar
## Ah, this is the culprit ...

## This will print the stack trace at the time of the error.
options(error = function() traceback(3))

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Get and Print Call Stacks。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。