使用browser()调试时可以返回到上一步

rnmwe5a2  于 2023-06-03  发布在  其他
关注(0)|答案(1)|浏览(373)

我想知道在R中使用browser()函数进行调试时是否有方法返回到上一步。
更多详情:我试图调试一个函数,以发现我的一个变量何时在循环中变成“NaN”。所以,在这个循环的每次迭代中,我调用一个函数“foo”来获取“X”的值。目前,我点击“F10”(相当于控制台中的输入“n”),直到我的变量X变成“NaN”。
我的问题是,我想后退一步,在X变成NaN之前进入函数“foo”内部,以研究那里发生了什么。
我知道我可以在每次循环迭代中得到函数“foo”的内部,但这种方法会很麻烦。
是否可以返回到以前执行的函数“foo”?

编辑为了更好地解释我需要什么,这里有一个我想要的玩具例子。

当我运行foo函数时,我收到一些关于NaN的警告。
foo函数是这样的:

foo <- function(){
 X0 = 1
  for( i in 1:1000){
    X  <- foo.bar(X0)
    X0  <- X
  }
}

有时,foo.bar()函数返回NaN。我的目的是在发生这种情况时进入foo.bar(),以调查这种不良结果的原因。
问题是我不知道foo.bar在运行函数之前是否会返回NaN。
注:www.example.com中的所有例程foo.bar是确定性的(即不依赖于随机生成的值)。

h7appiyu

h7appiyu1#

我以一种虚伪的方式做这件事。假设你将要执行第100行,但是你想“返回”到第98行。首先,手动恢复在第98或99行中更改的所有变量。根据您的代码,您可能能够做一些简单的事情,如foo <- 1:10(其中第99行已经完成了foo<- foo + bar^2),或者可能在当前调试级别执行前一个块(例如,第90:97行)以重建变量。然后复制/粘贴行98以再次执行,或者手动修改变量或命令本身以改变结果。

相关问题