【问题标题】:How to debug unexported functions from required packages?如何从所需的包中调试未导出的函数?
【发布时间】:2015-09-24 02:51:48
【问题描述】:

我正在使用的包中的一个函数给了我信息量不大的错误。我不知道发生了什么事。这个函数是由我调用的函数在内部调用的。像这样的:

myres <- the.func(x)

the.func <-function(x){
    unexported.func(x)
}

如何调试 unexported.func ? 使用debug 不起作用:

>debug(unexported.func)
Error in debug(undexported.func) : object 'unexported.func' not found

更新: 目前我做嵌套调试如下。但我觉得不方便:

>debug(the.func) # Initiate debugging for the outer function, so I get unexported.func loaded.
>myres <- the.func(x)
Browse[2]>debug(unexported.func) # Now I can call debug with this. 

【问题讨论】:

  • 是一个可以附加断点的调试器吗?
  • 这是一个很好的观点。 ESS 提供了一种设置断点的方法。但我不知道如何导航到包含unexported.func 实现的类并在那里设置断点。
  • 这不是 Emacs 或 ESS 特有的;它实际上是在 R 级别引用未导出的函数,这就是 ::: 的用途。

标签: r debugging namespaces


【解决方案1】:

您可以通过:::(三重冒号)运算符访问未导出的函数,并在其前面加上包命名空间名称(即包名称)。

假设 pkgA 包含未导出的函数 unexported.func(),我们将在 unexported.func() 上设置调试标志:

debug(pkgA:::unexported.func)

如果您不知道将哪个包(因此命名空间)用于给定的未导出函数,您始终可以使用getAnywhere() 确定这一点。

【讨论】:

  • 哈,这比我的方法好得多。您能否提供一个解决方案,说明如何在ESS 中将断点设置为unexported.func。这个问题让我想念Rstudio中的F2
  • 我没有太多使用 ess-tracebug 功能,所以恐怕我无能为力。试试 ESS 邮件列表并报告回来?
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 2016-10-16
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2016-04-07
相关资源
最近更新 更多