调试时,在代码中插入browser()
调用通常很有用。如果一切正常并且我想完成该功能我可以使用c
但是如果浏览器处于循环中,那么忽略这些新调用的适当方法是什么?
我查看了browser
帮助,但没找到。我现在正在做的事情:
browser <- function(...){NULL}
更换原始浏览器功能但不太令人满意。
答案 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会话中会使用隐藏对象污染全局命名空间。因此,我通常会在自己的环境中定义这些功能。但是,出于调试目的,这应该没问题。