R中的高级调试功能?

R中的高级调试功能?,r,debugging,ess,R,Debugging,Ess,R中是否有提供调试器更多功能的包和/或黑客?我特别想要: 跨过整个循环的能力 无需对函数调用调用debug即可单步执行函数调用的功能 当我已经在调试器中时,能够设置断点或有效地将浏览器调用插入到代码中(即,如果我在调试过程中找到需要断点的位置,就不必退出并重新运行整个函数) 等等 编辑:我用emacs/ess运行R,所以如果有任何ess技巧可以帮助我,我也会对此感兴趣。一个可视化调试器早已在(基于Eclipse的独立R IDE)和(用于R开发的Eclipse插件)中可用。断点、步进、步过等明显可

R中是否有提供调试器更多功能的包和/或黑客?我特别想要:

  • 跨过整个循环的能力
  • 无需对函数调用调用
    debug
    即可单步执行函数调用的功能
  • 当我已经在调试器中时,能够设置断点或有效地将
    浏览器
    调用插入到代码中(即,如果我在调试过程中找到需要断点的位置,就不必退出并重新运行整个函数)
  • 等等


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

    一个可视化调试器早已在(基于Eclipse的独立R IDE)和(用于R开发的Eclipse插件)中可用。断点、步进、步过等明显可用,可以(在一个实例中)处理和调试多个R会话,包括本地和远程会话。

    这称为ess tracebug。C-C-t ess开发图上提供了这一功能和一系列其他开发功能。按C-C-C-t C-h查看有什么,应该是不言自明的

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

    那里也有一个

    至于你的观点

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

  • 是的,C-C-C-t C-d来标记调试器所需的任何函数或方法。它足够聪明,可以显示从当前调试上下文可见的内部/命名空间函数。看看它看起来怎么样

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

  • 您还可以使用C-C-to切换断点。效果是立竿见影的,您无需再次寻找/评估您的函数

    总之,如果您已经在调试上下文中,那么C-C-t C-d可能是调试函数/方法的最干净的方法。否则,只需设置一个断点并对代码进行求值/编写源代码


    将来可能会添加动态断点,但这会增加额外的复杂性,对我来说没有多大好处。

    RStudio具有非常好的调试功能,可以满足几乎所有提到的3点。@geektrader谢谢,很高兴知道这一点。我目前使用emacs/ess。我记得当我看着RStudio的时候,有件事我不喜欢,但我不记得是什么了。这可能是为了再看一眼。@geektrader哦,现在我想起来了。IIRC您一次只能打开一个代码窗口(即可见),并且布局非常受限于他们希望您执行的操作。还是那样吗?我喜欢有很多窗口。@geektrader RStudio支持他的#2吗?如果是这样,怎么做?另外,最新的RStudio测试版真正关注的是升级调试工具。请参阅此处的更改日志:(正如您可能猜到的,我偏爱RStudio)