在爲browser
幫助文件中,有兩個似乎非常類似的選項:瀏覽器中完成和繼續有什麼區別?
f
電流環路的執行完成或功能
c
退出瀏覽器並繼續執行下一條語句。
他們之間有什麼區別,在什麼情況下差異明顯?
什麼可能是差一些線索 - 我寫了一個與以下內容稱爲browse.R
腳本:
for (i in 1:2){
browser()
print(i)
}
這是使用c
VS f
結果:
> source("browse.R")
Called from: eval(expr, envir, enclos)
Browse[1]> c
[1] 1
Called from: eval(expr, envir, enclos)
Browse[1]> c
[1] 2
> source("browse.R")
Called from: eval(expr, envir, enclos)
Browse[1]> f
[1] 1
Browse[2]> f
[1] 2
注意Browse[n]
的等級發生變化。這仍然沒有強調它們之間的任何實際區別。
我也想看看是否也許事情會從瀏覽器環境消失:
for (i in 1:2){
a <- "not modified"
browser()
print(a)
}
Called from: top level
Browse[1]> a <- "modified"
Browse[1]> f
[1] "modified"
Browse[1]> a
[1] "not modified"
Browse[1]> a <- "modified"
Browse[1]> c
[1] "modified"
所以沒有區別有兩種。
的C內部和'這裏F'大約一半, :https://github.com/wch/r-source/blob/e5b21d0397c607883ff25cca379687b86933d730/src/main/main.c [Ctrl + F爲'ParseBrowser(SEXP CExpr,SEXP rho)'],但我的c不夠強了解代碼執行的不同當然 – Chris
它可能是一個錯誤?預期的'f'行爲是你完成當前函數,然後返回到瀏覽器(不退出)。當您查看源代碼時,也會出現這種差異(請參閱上面的註釋)。當輸入'c'時,結果是'SET_RDEBUG(rho,0);'其中rho是指向調用瀏覽器的函數的指針。然而,當你看看'f'部分時,它將調試狀態設置爲true:'SET_RDEBUG(rho,1);'但是隻有在退出函數(指針消失)之後,它應該將rho的調試狀態設置爲高一級在堆棧軌跡上。只是一個想法,不知道是否正確。 – takje
@takje在這種情況下,瀏覽器不會更高,會嗎?它會爆發並重新開始。 –