返回

技术指南:使用 Caché 命令行调试疯狂的例程(第十六章)

闲谈

当 Caché 例程因中断命令挂起执行或发生错误而中断时,程序堆栈将保留有关堆栈的信息。当这种情况发生时,该信息的一个简短摘要将显示在终端提示(NAMESPACE >)中。例如,此信息可能采用以下形式:User 5D3 >。

字母代码和它们的含义如下:

字母代码 含义
U 用户例程
C 用户类方法
S 系统例程
E 系统类方法

使用 Quit 1 命令可以展开程序堆栈。以下是有关程序堆栈展开的详细信息:

理解程序堆栈信息

终端提示中显示的程序堆栈信息包括以下内容:

  • 字母代码: 标识例程类型(用户或系统)
  • 数字: 表示例程的唯一标识符
  • 大于号(>): 指示当前执行点

展开程序堆栈

要展开程序堆栈,请使用 Quit 1 命令。这将显示一个列表,其中包含堆栈中所有例程的详细信息,包括:

  • 例程名称
  • 源文件和行号
  • 正在执行的代码

使用 Quit 1 命令

Quit 1 命令用于展开程序堆栈,但它还具有以下附加功能:

  • Quit 1 n: 展开堆栈的前 n 个级别
  • Quit 1 g: 展开整个堆栈
  • Quit 1 u: 展开堆栈的上一个级别
  • Quit 1 d: 展开堆栈的下一级

实用示例

假设程序堆栈信息显示如下:

User 5D3>

要展开前 3 个堆栈级别,请使用以下命令:

Quit 1 3

这将显示以下信息:

routine example_routine(687015)
example.cls(15):5
   routine _SYSTEM(147907127)
   %SYS.Utilities(1000004900):1966
      routine __SQL(148201245)
      %SYS.SQL.SQL(1000010889):2500
         routine __Request(148202170)
         %SYS.Request(1000010909):1404
            routine __Open(148202337)
            %SYS.Stream(1000011077):616
               routine __CreateNew(148202445)
               %SYS.Stream.Stdio(1000011106):56

由此信息,我们可以了解到该例程是在 example.cls 文件的第 5 行中执行的,正在执行一个 SQL 查询,并且正在尝试打开一个流。

结论

理解程序堆栈信息和使用 Quit 1 命令对于调试 Caché 例程至关重要。通过遵循本指南,您可以有效地解决问题并快速恢复应用程序的运行。