R中的`debug()`的级别

时间:2017-06-02 13:56:27

标签: r debugging

通常,当我在R中的函数上调用debug()时,它只是逐步执行该函数,但有时它会跟随调用堆栈。我无法弄清楚为什么一个发生与另一个发生。

例如,如果我有

f <- function(x){
  print(x)
}

通常正在运行

debug(f)
f("Hello World")

只会显示

function(x) print(x)

有时它会进入print方法本身的代码,我看到方法dispatch和

function (x, digits = NULL, quote = TRUE, na.print = NULL, print.gap = NULL, 
  right = FALSE, max = NULL, useSource = TRUE, ...) 
{
  noOpt <- missing(digits) && missing(quote) && missing(na.print) && 
    missing(print.gap) && missing(right) && missing(max) && 
    missing(useSource) && missing(...)
  .Internal(print.default(x, digits, quote, na.print, print.gap, 
            right, max, useSource, noOpt))
}

这对调试我编写的函数没有帮助。有谁知道如何选择debug()进入调用堆栈?谢谢!

1 个答案:

答案 0 :(得分:0)

debug本身永远不会进入调用堆栈 - 它会向您显示那些debug ging的函数,仅此而已。

在这种特殊情况下,您有两个原因可以找到自己的另一个功能:

  1. 你不小心debug也称这个功能,即你打电话给debug(print.default)
  2. 在调试过程中,您将步入该功能。在R控制台中,当您按 s 而不是 n (“步入”而不是“下一步”)时会发生这种情况。在RStudio中,任何一个动作都有适当的按钮。
  3. 当适当地设置options(error)时,或者当函数包含对browser()的显式调用时,可能会导致发现自己在另一个函数内部的其他事情。