📜  R 编程中的调试

📅  最后修改于: 2022-05-13 01:54:24.742000             🧑  作者: Mango

R 编程中的调试

调试是从错误中清除程序代码以使其成功运行的过程。在编写代码时,一些错误或问题会在代码编译后自动出现,并且难以诊断。因此,修复它需要花费大量时间并经过多个级别的调用。

R 中的调试是通过警告、消息和错误进行的。 R中的调试意味着调试功能。各种调试功能有:

  • 编辑器断点
  • 追溯()
  • 浏览器()
  • 恢复()

编辑器断点

编辑器断点可以通过单击 RStudio 中行的左侧或在行中的光标按Shift+F9来添加到 RStudio。断点与browser()相同,但不涉及更改代码。断点在左侧用红色圆圈表示,表示源码运行后将在此行进入调试模式。

回溯()函数

traceback()函数用于提供有关函数如何到达错误的所有信息。它将显示在错误到达之前调用的所有函数,在许多语言中称为“调用堆栈”,R 倾向于调用回溯。

例子:

# Function 1
function_1 <- function(a){
 a + 5
}
  
# Function 2
function_2 <- function(b) {
 function_1(b)
}
  
# Calling function
function_2("s")
  
# Call traceback()
traceback()

输出:

2: function_1(b) at #1
1: function_2("s")

traceback()函数在评估期间显示错误。调用堆栈从正在运行的函数(在底部)读取到正在运行的函数(在顶部)。我们也可以使用traceback()作为错误处理程序,它将立即显示错误而无需调用 traceback。

# Function 1
function_1 <- function(a){
 a + 5
}
  
# Function 2
function_2 <- function(b){
 function_1(b)
}
  
# Calling error handler
options(error = traceback)
function_2("s")

输出:

Error in a + 5 : non-numeric argument to binary operator
2: function_1(b) at #1
1: function_2("s")

browser()函数

browser()函数被插入到函数中以打开 R 交互式调试器。它将停止函数() 的执行,您可以使用其自身的环境检查该函数。在调试模式下,我们可以修改对象,查看当前环境中的对象,也可以继续执行。

例子:

控制台中的 browser[1]> 命令确认您处于调试模式。要遵循的一些命令:

  • ls():当前环境中可用的对象。
  • print():评估对象。
  • n:检查下一条语句。
  • s:通过进入函数调用来检查下一条语句。
  • 其中:打印堆栈跟踪。
  • c:离开调试器并继续执行。
  • C:退出调试器并返回 R 提示符。

此外, debug()语句会自动在函数开头插入browser()语句。

恢复()函数

recover()语句用作错误处理程序,与直接语句不同。在recover()中,R 打印整个调用堆栈并让您选择要输入的函数浏览器。然后调试会话在选定的位置开始。

例子:

# Calling recover
options(error = recover)
  
# Function 1
function_1 <- function(a){
 a + 5
}
  
# Function 2
function_2 <- function(b) {
 function_1(b)
}
  
# Calling function
function_2("s")

输出:

Enter a frame number, or 0 to exit   

1: function_2("s")
2: #2: function_1(b)

Selection: 

调试会话从选定的位置开始。