Using ABAP Debugger

Objective

After completing this lesson, you will be able to aBAP プログラムのデバッグ

ADT での ABAP デバッガの使用の開始

プログラムでは、エラーの発生はつきものです。エラーは、さまざまな方法で出現します。ユーザが問題のあるアプリケーションを起動すると、クラッシュする場合も、予期しない問題が発生する場合も、何も起こらない場合もあります。ユーザの観点からは、ユーザインタフェースレベルでは、このエラーの発生方法と理由を示すことはできません。

開発者として、プログラムを 1 行ずつ詳細に調査し、さまざまなプログラム変数のどの命令と値の組合せでエラーが発生したのかを確立する必要があります。そこで、登場するのがデバッガです。

ADT のデバッガは、ABAP アプリケーションの分析に使用できる重要な診断ツールです。

デバッガを使用すると、実行時にプログラム内をステップインすることで、プログラムが正しく動作しない理由を特定することができます。これにより、プログラムの実行中に、実行中の命令および変数値の変更値を確認することができます。

デバッガを使用するには、最初にデバッグプロセスを開始する場所を決定します。1 つの方法は、ソースコードにブレークポイントを設定し、プログラムを実行し、そのブレークポイントで停止することです。

デバッガで利用可能な機能の一部を以下に示します。

ABAP Development Tools (ADT) デバッガの機能

機能ADT デバッガ
ブレークポイントの設定Yes
ウォッチポイントはい (リリースに依存)
条件付きブレークポイントYes
ステップスルーコードYes
変数値の表示Yes

ABAP Development Tools (ADT) を使用した ABAP プログラムのデバッグ

ADT を使用して ABAP プログラムをデバッグする場合は、Debug パースペクティブを使用します。これは、標準 Eclipse の Debug パースペクティブのカスタマイズバージョンで、デバッグで特に重要なビューと関数が含まれています。

デバッグ固有のビューが表示された Debug パースペクティブのスクリーンショット

デバッガパースペクティブの重要な要素は以下のとおりです。

ソースコードビュー

ソースコードビューは、デバッガパースペクティブの中心部分です。ソースコードが表示され、プログラム内の現在の位置が強調表示されます。

変数ビュー

変数ビューも非常に重要です。このビューを使用して、変数の現在値を照会します。

ブレークポイントビュー

Breakpoints ビューは、Variables ビューの横に表示されます (上の図 "Debug Perspective" では選択されていません)。このビューを使用して、ブレークポイントを照会、削除、または登録します。ブレークポイントは、通常の処理が中断されるプログラム内のポイントであり、デバッガが表示され、その時点でプログラムのステータスを分析することができます。

ナビゲーション機能

プログラムのデバッグ中に、ナビゲーション機能を使用してコードの実行を制御します。

デバッグビュー

左上の Debug ビューには、デバッグセッションとコール階層が表示されます。これは、後でモジュール化単位の呼出 (メソッドなど) をデバッグする場合に必要になります。

パースペクティブセレクタ

右上隅のパースペクティブセレクタボタンを使用して、ABAP パースペクティブに戻すことができます。

コード実行の制御

ナビゲーション機能

デバッグの開始時に、ナビゲーション機能を使用してコードの実行を制御します。

Step Into ボタンのスクリーンショット
再開 ボタンのスクリーンショット

重要なナビゲーション機能の一部を以下に示します。

ステップイン (F5)

Step Into を選択するか、キーボードの F5 を選択して 1 つのステップを実行します。この機能は、段階的な分析に使用します。たとえば、実際に実行される制御構造のコードブロックを確認する場合などです。

再開 (F8)

Resume を選択するか、キーボードで F8 を選択して、次のブレークポイントまでプログラムを実行します。  デバッガがブレークポイントに到達しない場合、プログラムは最後まで実行され、デバッグセッションが終了します。

行まで実行 (Shift+F8)

Run to Line を選択するか、キーボードで Shift+F8 を選択して、現在のカーソル位置までプログラムを実行します。コード行を選択してこの機能を選択することは、ブレークポイントの設定、再開の選択、およびブレークポイントの再削除に代わる便利な方法です。

行にジャンプ (Shift+F12)

Jump to Line を選択するか、キーボードの Shift+F12 を選択して、一部のコード行をスキップするか、すでに実行されている一部のコードに戻ります。この機能は、特定のコードが削除された場合に何が起こるかをシミュレートしたり、初めて分析しなかったコードのデバッグを少し繰り返したりする場合に役立ちます。これはジャンプであり、コードは実行されないことに留意してください。逆方向に移動しても、データオブジェクトへの変更は取り消されません。

強制終了

デバッグが完了し、残りのプログラムを実行しない場合は、強制終了 (赤色のボックスアイコン) を選択します。デバッグセッションが即時に強制終了します。

データオブジェクトの内容照会

デバッガでデータオブジェクトの内容を分析する 1 つの方法は、ABAP エディタのマウスオーバー機能です。デバッグモードで、データオブジェクトの名称にカーソルを合わせ、しばらく待機します。ダイアログボックスが開き、データオブジェクトのコンテンツが表示されます。

デバッガでデータオブジェクトの内容を分析するもう 1 つの方法は、変数ビューです。このビューには、データオブジェクトとその現在の値の一覧が表示されます。メイン一覧 (トップレベル変数) には、デフォルトでいくつかの組込データオブジェクトが含まれています。この例では、SY-SUBRC と ME です。ローカルノードを展開すると、現在の処理ブロックで定義されたすべての変数データオブジェクトの一覧が表示されます。

変数ビューのメイン一覧にデータオブジェクトを追加するには、以下の 3 つの方法があります。

  • エディタで、データオブジェクトの名称をダブルクリックします。
  • 変数一覧で、プレースホルダ <Enter variable> を左クリックし、データオブジェクトの名称を入力します。
  • ローカルノードの変数を右クリックし、最上位変数として表示を選択します。

デバッガでデータオブジェクトの内容を分析する 1 つの方法は、ABAP エディタのマウスオーバー機能です。デバッグモードで、データオブジェクトの名称にカーソルを合わせ、しばらく待機します。ダイアログボックスが開き、データオブジェクトのコンテンツが表示されます。

デバッガでデータオブジェクトの内容を分析するもう 1 つの方法は、変数ビューです。このビューには、データオブジェクトとその現在の値の一覧が表示されます。メイン一覧 (トップレベル変数) には、デフォルトでいくつかの組込データオブジェクトが含まれています。この例では、SY-SUBRC と ME です。ローカルノードを展開すると、現在の処理ブロックで定義されたすべての変数データオブジェクトの一覧が表示されます。

変数ビューのメイン一覧にデータオブジェクトを追加するには、以下の 3 つの方法があります。

  • エディタで、データオブジェクトの名称をダブルクリックします。
  • 変数一覧で、プレースホルダ <変数入力> を左クリックし、データオブジェクト名を入力します。
  • ローカルノードの変数を右クリックし、最上位変数として表示を選択します。

これはヒントです。一覧からデータオブジェクトを削除するには、データオブジェクトを右クリックして Remove を選択します。

ウォッチポイント

変数の単純なウォッチポイントを使用すると、デバッガ内の変数の値が変わるたびにプログラムが停止します。条件を追加すると、変数の値が変更され、条件が満たされた場合にのみプログラムが停止します。

変数にウォッチポイントを設定するには、ソースコード照会で変数をダブルクリックし、右クリックしてウォッチポイント設定を選択します。これにより、この変数にウォッチポイントが登録され、Breakpoints ビューに表示されます。

ウォッチポイントに条件を追加するには、ブレークポイントの一覧でその条件を選択し、条件項目に条件を入力します。Enter を押して、条件でウォッチポイントを保存します。

スクリーンショット:Breakpoints ビューで定義されたウォッチポイント

変数の予期しない値によって問題が発生する場合は、ウォッチポイントを使用してプログラムの実行中にその値を追跡することができます。

変数に対する単純なウォッチポイントを使用すると、この変数の値が変わるたびにデバッガでプログラムが停止します。条件を追加することで、変数のすべての値変更時にプログラムが停止するわけではなく、条件が満たされた場合にのみプログラムが停止します。

デバッガでのみ変数にウォッチポイントを設定するには、ソースコードの変数を強調表示し、右クリックしてウォッチポイント設定を選択します。これにより、変数にウォッチポイントが登録され、Breakpoints ビューに表示されます。

ウォッチポイント変数を選択してウォッチポイントに条件を追加し、ブレークポイントの一覧でその変数を選択して、条件項目に条件を入力します。キーボードの Enter を選択し、条件でウォッチポイントを保存します。

ウォッチポイントを削除するには、Breakpoints ビューに移動し、Watchpoint 変数を右クリックして Remove を選択します。

ABAP アプリケーションのデバッグとウォッチポイントの設定

ビジネス演習

ここでは、ブレークポイントを設定し、ウォッチポイントを登録する方法について説明します。

注記

この演習問題では、XX は各自の番号を表します。

ステップ

  1. クラス ZBP_R_XX_GROCERY のローカルクラスLHC_GROCERY を開きます。項目 lv_expiration に値が割り当てられる場合は、ブレークポイントを追加します。

    1. Project Explorer でクラス ZBP_R_XX_GROCERY をダブルクリックします。

    2. エディタウィンドウの下部にある Local Types タブを選択します。

    3. ブレークポイントを設定するには、行の余白をダブルクリックします。

      lv_expiration = ls_grocery-Expirationdate.
  2. アプリケーションプログラムを実行します。

    1. プロジェクトエクスプローラでサービスバインディング ZUI_XX_GROCERY_04 をダブルクリックして、サービスバインディングを開きます。

    2. サービスバージョン詳細で、エンティティセットおよびアソシエーションの下の食料品を選択します。

    3. Preview... を押します。アプリケーションを実行します。

  3. コードをステップスルーし、変数を確認します。

    1. ジャンプを押して、食料品一覧を表示します。一覧が空の場合は、登録を押して、少なくとも 1 つの食料品明細を登録します。

    2. 食料品アイテムの左側にあるチェックボックスを選択し、有効期限のチェックを押します。

    3. Eclipse には、デバッグパースペクティブに切り替えるためのプロンプトが表示されます。Switch を押します。デバッグパースペクティブが表示されます。

    4. lv_Expiration の値を表示するには、行の lv_expiration にマウスポインタを合わせます。

      lv_expiration = ls_grocery-Expirationdate.
    5. lv_expriation をダブルクリックして、ウィンドウの右側の変数一覧に追加します。

    6. Step Into (F5) (single step) を押します。変数一覧で lv_expiration の変更された値を確認します。

    7. より多くのコードをステップスルーし、関心のある変数値を確認します。

    8. 終了するには、再開 (F8) を押します。

      再開 ボタンのスクリーンショット
  4. 変数のウォッチポイントを作成します。

    注記

    ウォッチポイントに到達するには、選択した食料品に過去の有効期限が必要です。そうでない場合は、一覧から食料品明細をクリックし、詳細画面で編集を選択し、有効期限を過去の日付に設定します。
    1. 変数にウォッチポイントを登録するには、デバッグパースペクティブを入力するまで前のステップを繰り返します。

    2. マウスで lv_expired を右クリックします。ウォッチポイント設定を選択します

    3. 画面の右上で、Variables タブから Breakpoint タブに切り替えます。

    4. lv_expired をダブルクリックし、ビューの下部にこの条件を追加します。

      = abap.true
    5. 保存保存 (Ctrl-S) を押します。

    6. Resume (F8) を押します。

  5. ウォッチポイント変数の古い値と新しい値を表示します。

    1. 変数タブを押します。

    2. ウォッチポイント LV_EXIPIRED 値を展開します。最近の値現在の値を表示します。

  6. アプリケーションを再開し、ABAP パースペクティブに戻ります。

    1. Resume (F8) を押します。

    2. ウィンドウの右上にある ABAP パースペクティブボタンを押します。

    実践する