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