r - R 中的高级调试功能?

标签 r debugging ess

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

  • 跨越整个循环的能力
  • 无需调用即可进入函数调用 debug在他们身上也
  • 设置断点或有效插入的能力 browser当我已经在调试器中时调用代码(即,如果我在调试过程中找出我想要断点的位置,我不必退出并再次重新运行整个函数)

  • 等等。

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

    最佳答案

    这称为 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 没有太多增益。

    关于r - R 中的高级调试功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454703/

    相关文章:

    debugging - ERROR_NOT_ENOUGH_MEMORY 故障排除

    r - Emacs ESS 缩进和自动完成

    r - 在 Emacs 中更改低级模式的背景颜色

    C# WPF 应用程序在 VS 调试中运行,但不作为 EXE 运行

    r - 将一个数据框与另一个包含增长率的数据框相乘,但将其复合

    r - 为什么 R 需要数据框的名称?

    r - 将图层添加到 map 而不是 GGplotly 的 Plotly 方法

    javascript - 使用 chrome 调试器有没有办法查看调用我的 api 的函数?

    r - 为 R 定制 ESS 环境

    r - 为什么在不输入 "Arithmetic"的情况下键入 `?mgcv-faq`时,为什么要引用 `library(mgcv)`的手册页?