Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - SQL 用法 » SQL Anywhere 调试程序 » 教程:调试程序入门

 

第 2 课:诊断错误

设置断点,然后逐步完成代码,观察过程执行期间各变量的值,通过这种方式对 debugger_tutorial 存储过程中的错误进行诊断。

前提条件

本课假定您拥有在本教程开头的特权部分中列出的角色和特权: 教程:调试程序入门.

本课假定您已完成前面的所有课程。请参见第 1 课:启动调试程序以及查找错误

 任务
  1. 在右窗格 [debugger_tutorial (GROUPO)] 的 [SQL] 选项卡中,找到以下语句:

    OPEN cursor_this_customer;
  2. 单击语句左侧的灰色竖区添加断点。断点会显示为红色圆圈。

  3. 在左窗格中,右击 [debugger_tutorial (GROUPO)],然后单击 [从 Interactive SQL 执行]。

    在 Sybase Central 的右窗格中,断点上方出现黄色箭头。

  4. 在 [调试程序详细信息] 窗口中,单击 [局部] 选项卡,以显示过程中的局部变量的列表以及这些变量的当前值和数据类型。变量 Top_CompanyTop_ValueThis_ValueThis_Company 均未初始化,因此均为 NULL。

  5. 按 F11 键以滚动浏览该过程。到达下面这一行时,变量的值会改变:

    IF SQLSTATE = error_not_found THEN
  6. 再按 F11 键两次,确定执行采用了哪个分支。黄色箭头移回到下面的文本处:

    customer_loop: loop

    IF 测试未返回 true。该测试之所以会失败,是因为任何值与 NULL 的比较都返回 NULL。值为 NULL 会导致测试失败并且不执行 IF...END IF 语句中的代码。

    此时,您可能会意识到问题在于 Top_Value 未初始化这一事实上。

  7. 测试 [问题在于缺少对 [Top_Value] 进行初始化] 这一假设,而不更改过程代码。

    1. 在 [调试程序详细信息] 窗口中,单击 [局部] 选项卡。

    2. 单击 [Top_Value] 变量,在 [] 字段中键入 3000,然后按 Enter 键。

    3. 重复按 F11,直至 This_Value 变量的 [] 字段大于 3000。

    4. 单击断点以使其变为灰色。

    5. 按 F5 键以执行该过程。

      Interactive SQL 窗口将再次出现并显示正确结果:

      top_company top_value
      Chadwicks 8076
    6. 关闭任何打开的 Interactive SQL 窗口。

结果

假设已经得到确认。问题在于没有初始化 [Top_Value] 变量。

下一个

前进至第 3 课:修正错误

 另请参见