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] キーをもう 2 回押して、分岐を確認します。黄色の矢印が、次のテキストに戻ります。

    customer_loop: loop

    IF テストは TRUE を返しませんでした。テストが失敗したのは、NULL とどのような値を比較しても NULL が返されるためです。NULL 値によりテストは失敗し、IF...END IF 文内のコードは実行されませんでした。

    このことから、Top_Value が初期化されていないことが原因とわかります。

  7. プロシージャコードを変更しないで、Top_Value が初期化されていないことが問題であるとする仮説をテストします。

    1. [デバッガの詳細] ウィンドウで、[ローカル] タブをクリックします。

    2. [Top_Value] 変数をクリックし、[値] フィールドに 3000 と入力し、[Enter] を押します。

    3. [This_Value] 変数の [値] フィールドが 3000 よりも大きな値になるまで [F11] キーを繰り返し押します。

    4. ブレークポイントをクリックして、グレーにします。

    5. [F5] キーを押して、プロシージャを実行します。

      [Interactive SQL] ウィンドウが再び表示されて、正しい結果が表示されます。

      top_company top_value
      Chadwicks 8076
    6. [Interactive SQL] ウィンドウが開いている場合は閉じます。

結果

仮説が正しいことが確認されました。Top_Value 変数が初期化されていないことが原因でした。

次の手順

レッスン 3:バグの修正に進みます。

 参照