如何在不为其创建脚本的情况下逐步执行调试器中表达式的求值?
How to step-through the evaluation of an expression in the debugger without creating a script for it?
我知道我总是可以在 nonce R 脚本中插入一个单独的表达式,然后使用 Rstudio 将断点附加到脚本中的表达式并获取脚本。
我正在寻找一种方法来逐步评估调试器中的表达式,不需要为此目的创建新脚本。
遇到断点时,您可以在控制台中计算表达式 window。一些简单的表达式看起来像是浏览器的命令(例如 n
),因此您可能需要输入 print(n)
.
据我所知,这仅适用于表达式的单次计算,您无法将其显示在“值”窗格中。 R 有一种方法可以使变量对应于实时表达式(参见 ?makeActiveBinding
),但 RStudio 调试器只是将它们显示为 <Active binding>
,它不显示值。
问题编辑后:据我所知你不能在 R 中这样做。但是在 RStudio 中创建脚本非常容易,所以我会这样做:File | New file | R Script
,或适用于您的平台的任何键盘快捷键。
您可以通过将表达式包装在函数中,然后在函数上设置调试标志并 运行 来实现。
foo <- function() {
# Your expr
}
debug(foo)
foo()
您还可以使用 debug
在您的表达式调用的任何函数上设置调试标志,以在那里开始调试。更多:
https://stat.ethz.ch/R-manual/R-devel/library/base/html/debug.html
另一种方法是在表达式中包含对 browser()
的调用。评估该调用时,调试器将激活。
https://stat.ethz.ch/R-manual/R-devel/library/base/html/browser.html
我找到了一个非常简单的解决方案。只需评估以下复合表达式:
browser(); <ARBITRARY R EXPRESSION>
(公平地说,Jonathan 确实在他的回答中提到了这个解决方案,但我在阅读时不明白他的意思。我最终 "rediscovering" 我自己的相同解决方案。)
我知道我总是可以在 nonce R 脚本中插入一个单独的表达式,然后使用 Rstudio 将断点附加到脚本中的表达式并获取脚本。
我正在寻找一种方法来逐步评估调试器中的表达式,不需要为此目的创建新脚本。
遇到断点时,您可以在控制台中计算表达式 window。一些简单的表达式看起来像是浏览器的命令(例如 n
),因此您可能需要输入 print(n)
.
据我所知,这仅适用于表达式的单次计算,您无法将其显示在“值”窗格中。 R 有一种方法可以使变量对应于实时表达式(参见 ?makeActiveBinding
),但 RStudio 调试器只是将它们显示为 <Active binding>
,它不显示值。
问题编辑后:据我所知你不能在 R 中这样做。但是在 RStudio 中创建脚本非常容易,所以我会这样做:File | New file | R Script
,或适用于您的平台的任何键盘快捷键。
您可以通过将表达式包装在函数中,然后在函数上设置调试标志并 运行 来实现。
foo <- function() {
# Your expr
}
debug(foo)
foo()
您还可以使用 debug
在您的表达式调用的任何函数上设置调试标志,以在那里开始调试。更多:
https://stat.ethz.ch/R-manual/R-devel/library/base/html/debug.html
另一种方法是在表达式中包含对 browser()
的调用。评估该调用时,调试器将激活。
https://stat.ethz.ch/R-manual/R-devel/library/base/html/browser.html
我找到了一个非常简单的解决方案。只需评估以下复合表达式:
browser(); <ARBITRARY R EXPRESSION>
(公平地说,Jonathan 确实在他的回答中提到了这个解决方案,但我在阅读时不明白他的意思。我最终 "rediscovering" 我自己的相同解决方案。)