如何忽略未来的浏览器调用

时间:2016-03-17 13:08:09

标签: r debugging

调试时,在代码中插入browser()调用通常很有用。如果一切正常并且我想完成该功能我可以使用c但是如果浏览器处于循环中,那么忽略这些新调用的适当方法是什么?

我查看了browser帮助,但没找到。我现在正在做的事情:

browser <- function(...){NULL}

更换原始浏览器功能但不太令人满意。

1 个答案:

答案 0 :(得分:2)

您可以将browser包装在自己的调用中并使其成为条件:

breakpoint = function ()
    if (! exists('.break_disabled', parent.env(environment())))
        browser(skipCalls = 1L)

使用skipCalls选项是因为browser调用嵌套在函数内,而不是直接从您想要中断的位置调用。

现在您只需要提供两个函数来切换断点:

disable_break = function ()
    assign('.break_disabled', TRUE, parent.env(environment()))

enable_break = function ()
    if (exists('.break_disabled', parent.env(environment())))
        rm(.break_disabled, envir = parent.env(environment()))

值得注意的是,将上述函数粘贴到脚本或R会话中会使用隐藏对象污染全局命名空间。因此,我通常会在自己的环境中定义这些功能。但是,出于调试目的,这应该没问题。