【问题标题】:R Debugger doesn't stop at breakpointsR 调试器不会在断点处停止
【发布时间】:2015-06-30 14:06:32
【问题描述】:

我正在 R 中运行一个脚本(使用 R Studio),它调用了几个嵌套函数(脚本调用了一个函数,该函数有一些代码,然后调用另一个函数等)。我需要调试一个向下几个级别的函数。我可以通过在函数调用的行上放置一个断点,然后单步执行该函数来进入脚本调用的第一个函数。但是,当我尝试重复此步骤以进入下一个函数时(通过在下一个函数调用的行处设置一个断点),R 只会继续运行代码直到它完成。即使使用声称“继续执行直到遇到下一个断点”的“继续”命令。

我可以通过逐行逐行进入其他函数,然后在到达每个函数后进入每个函数,但是这样需要很长时间才能到达我需要的位置。

感谢任何想法

【问题讨论】:

    标签: r function debugging rstudio breakpoints


    【解决方案1】:

    debug 对于这类问题非常方便。比方说,你想一步一步地通过函数myfun。只需在运行代码之前运行debug(myfun),它的行为就好像你在该函数的第一行有一个断点。

    如果该函数是从其他函数中调用的,或者它在一个包中,这也有效。在后一种情况下,它特别有用,因为您不能只更改来自包的函数的代码。

    【讨论】:

    • 知道了,谢谢!我不得不玩弄它来得到我想要的东西。您必须为每个嵌套函数(不仅仅是您要调试的函数)调用 debug(myfunc),并确保 myfunc 已在当前函数中获取。
    • 我认为 debug 应该在函数内的函数内调用的函数上工作......而不是在调用函数上运行它。但是我不知道的包中的功能似乎存在一些限制。
    • 如果这是一个包的功能(内部的),我如何确保它是有源的?
    • 您应该也可以在包中的函数上使用debug()。例如:debug(layer); ggplot(mtcars) + geom_line(aes(x = disp, y = cyl))。如果你感兴趣的函数没有从包中导出,你必须使用:::-notation,例如debug(ggplot2:::rename_aes)和上面的ggplot()-call。
    猜你喜欢
    • 2023-03-12
    • 2010-11-25
    • 2011-07-14
    • 2013-09-27
    • 2015-07-17
    • 2015-02-08
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多