R 中是否有任何软件包和/或黑客可以为调试器提供更多功能?我正在特别寻找:
- 跨过整个循环的能力
- 无需调用即可进入函数调用的
debug
能力 - 当我已经在调试器中时设置断点或有效地将
browser
调用插入代码中的能力(即,如果我在调试期间找出我想要断点的位置,我不必退出并再次重新运行整个函数)
等等。
编辑时:我用 emacs/ess 用完了 R,所以如果有任何 ess 技巧可以提供帮助,我也会对此感兴趣。
这称为 ess-tracebug。C-c C-tess-dev-map上提供了此功能和许多其他开发功能。按 C-c C-t C-h一下看看有什么它应该是不言自明的。
有关基本内容,请参阅 ess 手册的这一部分和ess-tracebug的原始项目页面。有几种可用的断点类型,您可以添加自己的断点并使它们执行任意 R 代码。对于错误操作和记录器也是如此。
那里也有教程。
至于你的观点。
默认情况下,您不能跳过整个循环(R 不允许这样做,afaik)。但是您可以使用 MN 跳过多次迭代,或者在循环之后放置一个断点并在遇到循环时运行 MC(尽管您需要提前 eval/source)。还有MU跳转到外调用帧。
是的,C-c C-t C-d为调试器标记您想要的任何功能或方法。它足够聪明,还可以显示从当前调试上下文中可见的内部/命名空间函数。请参阅此处了解它的外观。
您可以像上面 (2) 中那样标记要调试的函数,或者插入断点并评估函数。评估的效果将取决于您如何进行。如果它是一个简单的评估(如 Cc Cc),那么该函数将来自当前上下文,这可能是您想要的,但很可能不是。如果开发人员处于活动状态并且该功能是已开发包的一部分,则评估发生在命名空间/包级别,因此您将立即安装断点。
您还可以使用 切换断点C-c C-t o。效果立竿见影,您无需再次获取/评估您的功能。
总而言之,C-c C-t C-d如果您已经在调试上下文中,这可能是调试函数/方法的最简洁方法。否则,只需设置断点并评估/获取代码。
未来可能会添加动态断点,但它会增加额外的复杂性层,而 IMO 收益不大。