當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。