R 中的高级调试功能



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

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

等。

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

称为ess-tracebug。这和一堆其他的开发功能在C-c C-t ess-dev-map上可用。按 C-c C-t C-h 看看那里有什么 它应该是不言自明的。

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

那里还有一个教程。

至于你的观点。

  1. 默认情况下,您不能跳过整个循环(R 不允许这样做,afaik)。但是你可以用 M-N 跳过几次迭代,或者在循环后放置一个断点,并在遇到循环时运行 M-C(不过你需要提前评估/源)。还有M-you跳转到外部呼叫帧。

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

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

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

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

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

从那以后,可视化调试器早已在 Architect(一个独立的基于 Eclipse 的 R IDE)和 StatET(用于 R 开发的 Eclipse 插件)中可用。断点、单步执行、单步执行等显然是可用的,并且可以(在一个实例中)使用和调试多个本地和远程 R 会话。

最新更新