Rexx - 调试

调试是任何编程语言的一个重要功能。 它可以帮助开发人员诊断错误,找到根本原因,然后相应地解决它们。 在 Rexx 中,跟踪实用程序用于调试。 跟踪指令可以通过两种方式实现,一种是批处理方式,另一种是交互方式。 让我们看看如何实现这两个选项。

以批处理模式跟踪

trace 命令用于给出执行的每个 Rexx 命令的详细级别。

trace 语句的一般语法如下所示 −

语法

trace [setting] 

其中设置可以是以下选项中的任何一个 −

  • A − 跟踪所有命令。

  • C − 仅跟踪发送到操作系统的主机命令。

  • E − 仅跟踪发送到操作系统并导致错误的主机命令。

  • F − 仅跟踪发送到操作系统并导致失败的主机命令。

  • I − 这提供了 Rexx 命令的中级跟踪。

  • L − 如果您想在跟踪发生时对其进行标记,则可以选择此选项。

  • N − 这是默认选项,不会发生任何跟踪。

让我们看一下跟踪命令的示例。

示例

/* 主程序 */
trace A 

/* 主程序 */
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 

msg : 
   say ' This is an incorrect number ' 

上述程序的输出如下 −

5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
   7 *-* say 'This is a whole number
This is a whole number                                                   
   8 *-* return 0

从输出中,您可以看到程序的输出中添加了额外的跟踪。 关于输出,需要注意以下几点 −

  • 行号与执行的语句一起添加到跟踪输出中。

  • 执行的每一行都显示在跟踪输出中。

trace 跟踪函数

还可以借助跟踪功能来启用跟踪。 一般语法和示例如下所示。

语法

trace() 

上述函数返回当前跟踪级别。

参数

None

返回值

上面的函数给出了当前的跟踪级别。

示例

/* 主程序 */
say trace() 

/* 主程序 */
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 
msg : 

say 'This is an incorrect number ' 

上述程序的输出如下。

N 
This is an incorrect number 

第一行 N 表示迹线设置为"正常"。

设置跟踪级别

可以使用跟踪功能设置跟踪级别。 一般语法和示例如下所示。

语法

trace(travel_level) 

参数

  • trace_level − 这与可用于设置跟踪级别的选项类似。

返回值

上面的函数给出了当前的跟踪级别。

示例

/* 主程序 */
say trace() 
current_trace = trace('A') 
say current_trace 

/* 主程序 */
n = 100.45 if datatype( n, wholenumber ) then 
signal msg say 'This is a whole number' 
return 0 
msg : 
say ' This is an incorrect number ' 

上述程序的输出如下 −

N 
   4 *-* say current_trace 
N 
   6 *-* n = 100.45 
   7 *-* if \ datatype( n, wholenumber ) then 
   8 *-* signal msg 
   12 *-* say 'This is an incorrect number' 
'This is an incorrect number' 

交互式跟踪

交互式跟踪是指随着程序运行而进行跟踪。 就像在 Visual Studio for .Net 等 IDE 中一样,您可以在其中添加断点并查看每个语句的执行情况,同样,您也可以在每个代码行运行时看到程序。

一般语法如下 −

语法

trace ?options 

其中,options 选项与跟踪命令相同,如下所示。

  • A − 跟踪所有命令

  • C − 仅跟踪发送到操作系统的主机命令。

  • E − 仅跟踪发送到操作系统并导致错误的主机命令。

  • F − 仅跟踪发送到操作系统并导致失败的主机命令。

  • I − 这提供了 Rexx 命令的中级跟踪。

  • L − 如果您想在跟踪发生时对其进行标记,则可以选择此选项。

  • N − 这是默认选项,不会发生任何跟踪。

让我们看一个实现主动跟踪的示例。

示例

/* 主程序 */
trace ?A

/* 主程序 */
n = 100.45 if datatype( n, wholenumber ) then 
signal msg 

say 'This is a whole number' 
return 0 
msg : say 'This is an incorrect number' 

上述程序的输出将如以下程序所示。 跟踪将在每一行代码处停止; 然后您需要按 Enter 按钮移动到下一行代码。

  This is an incorrect number
       +++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
     5 *-* n = 100.45 if datatype( n, wholenumber ) then 
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
     6 *-* signal msg 
    10 *-* msg :
    10 *-* say 'This is an incorrect number'