如果我使用options(error=recover)进入了R调试器,那么我如何才能了解并了解放置它的位置附近的代码?例如:

options(error=recover)
solve(matrix(0, nrow=5, ncol=5))

# Error in solve.default(matrix(0, nrow = 5, ncol = 5)) :
#   Lapack routine dgesv: system is exactly singular: U[1,1] = 0
#
# Enter a frame number, or 0 to exit
#
# 1: solve(matrix(0, nrow = 5, ncol = 5))
# 2: solve.default(matrix(0, nrow = 5, ncol = 5))
#
# Selection: 1
# Called from: top level
Browse[1]>

此时,如果我按下n或返回,我将再次死亡并得到recover提示,而看不到任何代码行。如果执行堆栈跟踪(键入where),则可以看到调用链,但看不到我实际坐在的代码(在堆栈的任何级别)。 [实际上,在这种solve情况下,我确实看到了一些代码,但这只是因为一个匿名函数是堆栈的一部分,所以它别无选择,只能打印其定义而不是其名称。]

有小费吗?

[编辑]我对用例很感兴趣,在用例中,我需要弄清楚某人的包装代码中发生了什么。我不控制源代码,因此无法添加browser(),并且无法轻松访问源文件,因此仅使用行号不会有太大帮助。我主要只是想看看实际的代码。

最佳答案

如果您喜欢Emacs,我知道ess-tracebug包通过将光标移至源代码缓冲区中的当前行来提供此功能。 ess-tracebug包含在最新版本的ESS模式中。

(如果OP不喜欢Emacs,请不要投票赞成我的答案:请等待更好的答案。)

关于r - 在R调试器中显示上下文?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14608031/

10-16 09:35