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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » ストアド・プロシージャとトリガ » プロシージャ、関数、トリガ、イベントのデバッグ » チュートリアル:デバッガの使用開始 » レッスン 2:ストアド・プロシージャのデバッグ

 

バグの診断

プロシージャのバグを診断するために、プロシージャにブレークポイントを設定して、コードをステップ・スルーし、プロシージャの実行とともに変化する変数の値を監視します。

ここでは、プロシージャ内の最初の実行可能な文にブレークポイントを設定します。

♦  バグを診断するには、次の手順に従います。
  1. [モード] - [デバッグ] を選択します。

  2. 右ウィンドウ枠で、[Debugger_Tutorial (GROUPO)] をダブルクリックします。

  3. 右ウィンドウ枠で、次の文を検索します。

    OPEN cursor_this_customer;
  4. ブレークポイントを追加するには、左側にあるグレーの縦線の領域をクリックします。ブレークポイントは、赤い円で表示されます。

  5. 左ウィンドウ枠で、[Debugger_Tutorial (GROUPO)] を右クリックし、[Interactive SQL から実行] を選択します。

    Sybase Central の [接続] タブに、ブレークポイントを示す黄色の矢印が表示されます。

  6. [デバッガの詳細] ウィンドウで [ローカル] タブをクリックし、プロシージャ内のローカル変数とその現在の値とデータ型のリストを表示します。変数 top_company、top_value、this_value、this_company は、いずれも初期化されていないため NULL です。

  7. [F11] キーを押して、プロシージャをスクロールします。次の行に到達すると、変数の値が変化します。

    IF this_value > top_value THEN
  8. [F11] キーをもう一度押して、分岐を確認します。黄色の矢印が、次のテキストに戻ります。

    customer_loop: loop

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

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