4

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

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

等等。

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

4

2 回答 2

3

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

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

那里也有教程

至于你的观点。

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

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

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

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

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

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

于 2013-10-19T23:38:32.900 回答
2

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

于 2013-10-19T16:01:33.303 回答