【问题标题】:Advanced debugging functionality in R?R中的高级调试功能?
【发布时间】:2013-10-18 16:36:47
【问题描述】:

R 中是否有任何软件包和/或 hack 可以为调试器提供更多功能?我正在专门寻找:

  1. 能够跨过整个循环
  2. 无需调用debug即可进入函数调用的能力
  3. 当我已经在调试器中时设置断点或有效地将browser 调用插入代码中的能力(即,如果我在调试期间确定我想要断点的位置,我不必退出并重新运行再次完整的功能)

等等

编辑时:我用掉了 emacs/ess 的 R,所以如果有任何 ess 技巧可以提供帮助,我也会对此感兴趣。

【问题讨论】:

  • RStudio 具有非常好的调试功能,几乎可以满足提到的所有 3 点。
  • @geektrader 谢谢,很高兴知道。我目前使用 emacs/ess。我记得当我查看 RStudio 时,有一些我不喜欢的东西,但我不记得那是什么了。这可能会推动重新审视。
  • @geektrader 哦,现在我想起来了。 IIRC 您一次只能打开一个代码窗口(即可见),并且布局非常受限于他们希望您执行的操作。还是那样吗?我喜欢有很多窗户。
  • @geektrader RStudio 支持他的#2 吗?如果有,怎么做?
  • 另外,最新的 RStudio 测试版确实专注于升级调试工具。在此处查看更新日志:rstudio.com/ide/download/preview(您可能会猜到,我偏爱 RStudio)

标签: r debugging ess


【解决方案1】:

这称为 ess-tracebug。 C-c C-t ess-dev-map 上提供了这个和许多其他开发功能。按 C-c C-t C-h 看看有什么 应该是不言自明的。

请参阅 ess 手册的 sectioness-tracebug 的原始项目页面了解基本内容。有几种可用的断点类型,您可以添加自己的断点并让它们执行任意 R 代码。错误操作和记录器也是如此。

那里还有一个tutorial

至于你的观点。

  1. 默认情况下,您不能跳过整个循环(R 不允许这样做,afaik)。但是您可以使用 M-N 跳过多次迭代,或者在循环后放置一个断点并在遇到循环时运行 M-C(尽管您需要提前 eval/source)。还有M-U跳转到外层调用框架。

  2. 是的,C-c C-t C-d 标记您想要用于调试器的任何函数或方法。它足够聪明,还可以显示从当前调试上下文中可见的内部/命名空间函数。请参阅 here 了解其外观。

  3. 您可以像上面 (2) 中那样标记要调试的函数,或者插入断点并评估函数。评估的效果将取决于您如何进行。如果它是一个简单的评估(如 C-c C-c),那么该函数将来自当前上下文,这可能是您想要的,但很可能不是。如果开发人员处于活动状态并且该功能是已开发包的一部分,则评估发生在命名空间/包级别,因此您将立即安装断点。

您还可以使用 C-c C-t o 切换断点。效果立竿见影,您无需再次获取/评估您的功能。

总之,如果您已经在调试上下文中,C-c C-t C-d 可能是调试函数/方法的最简洁方式。否则,只需设置断点并评估/获取代码。

未来可能会添加动态断点,但它会增加一层额外的复杂性,而 IMO 收益并不大。

【讨论】:

    【解决方案2】:

    Architect(一个独立的基于 Eclipse 的 R IDE)和StatET(用于 R 开发的 Eclipse 插件)长期以来一直提供可视化调试器。断点、步入、跳过等显然是可用的,并且可以(在一个实例中)处理和调试多个本地和远程 R 会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多