R中的高级调试功能?

时间:2013-10-18 16:36:48

标签: r debugging ess

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

  1. 跨越整个循环的能力
  2. 无需调用debug即可进入函数调用的能力
  3. 当我已经在调试器中时,能够设置断点或有效地将browser调用插入到代码中(即,如果我在调试期间弄清楚我想要断点的地方,我不必退出并且再次重新运行整个功能)
  4. 编辑:我运行了来自emacs / ess的R,所以如果有任何可以帮助的ess技巧,我也会对此感兴趣。

2 个答案:

答案 0 :(得分:3)

这叫做ess-tracebug。在 C-c C-t ess-dev-map上可以找到这个以及一系列其他开发功能。按 C-c C-t C-h 查看那里有什么应该是自我解释的。

有关基本内容,请参阅section的ess手册和ess-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),那么该函数将被输入当前上下文,这可能是你想要的,但很可能不是。如果开发人员处于活动状态且该功能是已开发软件包的一部分,那么评估将在命名空间/包级别进行,因此您将立即安装断点。

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

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

    将来可能会添加断点,但它会增加额外的复杂层,而IMO的收益并不高。

答案 1 :(得分:2)

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