プログラムを書くときに一度は必ず実行する必要があるのがデバッグ(DEBUG)です。プログラムが正常に動作するか?バグが発生していないかを検証するために必須の方法で、ABAPerであれば理解必須の基本知識です。
このページでは、SAPにおける基本的なデバッグ方法を画像付きで説明します。
ABAPエンジニアを目指す方であれば、絶対に知っておきたい内容ばかりですので、是非最後までご覧ください。
それでは早速解説を始めます。
前提:デバッグ(DEBUG)とは?
デバッグ(DEBUG)とは、プログラムを1行1行実行し、プログラムの不備やバグを発見する作業のこと。
システムに障害が発生した際や、コーディング後想定通り処理が動かない場合、なぜそのバグが起こったのか?を確認する手段として用います。実際のプログラムを1ステップずつ実行しながら、その時の変数の値・構造/内部テーブルに格納されているレコードを確認していきます。
また、単体テスト(プログラムテスト)においては、デバッガを利用してテストを実施するケースがあります。ABAPerであれば、誰もが知っている基本操作の1つです。
デバッグの仕方
デバッグは、デバッガを起動して実行します。
デバッガを起動する方法は主に3つ。
1つ1つ、図を使いながら解説します。
セッションブレークポイントの設置
トランザクションコード:SE38「ABAPエディタ」、もしくはSE80「オブジェクトブラウザー(開発ワークベンチ)」を開きます。
デバッグしたいプログラム名を入力し、ソースコードを照会します。ソースコードの照会画面に遷移したら、後は「ブレークポイント」を設置したい行をダブルクリックします。
ブレークポイントとは?
ブレークポイントという言葉を初めて聞く人もいるかもしれませんので、少々解説を。
ブレークポイントとは、プログラムをストップさせるポイントのことを言います。ブレークポイントを設定した場合、その行の処理に入る直前でプログラムがストップします。
例えば・・・
- 処理A
- 処理B
- 処理C ← ここにブレイクポイントを設置
この場合、プログラムは処理Cが入る直前でストップします。つまり、ブレークポイントは「最も怪しいと思われる処理の直前」に置くのが基本原則となります。
- 処理A
- 処理B
- (条件が真なら)処理C ←ここにブレイクポイントを設置
- 処理D
また、上記のように条件付きでその処理が実行される場合は、「条件に当てはまる場合にのみ」プログラムがストップします。
仮に、条件が「偽」で処理Cがそもそも実行されない場合には、ブレイクポイントを設置していてもブレイクポイントでプログラムはストップしません。
/h :コマンド実行
トランザクションコード:SE38からの直接実行の他にトランザクションコード「/h」を用いてデバッガを起動させることができます。
具体的な手順は以下の通り、非常に簡単です。
① コマンド項目に「/h」を入力しEnterボタンを押す
② デバッグしたい機能を実行する
「/h」コマンドを実行するだけでデバッガが起動されるため非常に簡単です。
BREAK-POINT命令
ABAP命令「BREAK-POINT」をソースコード中に直接記載することで、デバッガを強制的に立ち上げることも可能です。
BREAK-POINT.
IF SY-SUBRC <> 0 . BREAK-POINT. ENDIF.
BREAK-POINT命令では、ソースコード上に直接ブレークポイントを設置するようなイメージです。したがって、プログラムを実行する環境が本番環境だとしてもデバッガが起動されてしまうため注意が必要。
プログラム作成時に、毎回ブレークポイントを設置するのが面倒な場合に、一時的に書いておくような使い方が一般的。慣れない方はあまり使わないほうがよさそうです。
デバッグ画面の見方
ここまでで、具体的な手順は終わりです。手順自体は簡単です。ただ、デバッガの画面を使いこなせないと、プログラムを追うことは難しいです。
実際に、デバッグをしてプログラムをストップさせた画面を見て、イメージをつけていきましょう。
左側にソースコードが、右側に変数に格納されている実際の値が表示されます。
※ソースコード中の変数をダブルクリックすることで、右側の変数領域で値を確認することができます。
変数でなくても、構造やテーブルの値も参照することができます。選択画面でINPUT1、INPUT2に入力された「1」と「2」が格納されていることが分かります。
デバッグはこのように見てみるとかなり単純な作業のため、手順自体はだれでも理解することができます。デバッグのツボは、この手順を何度も何度も繰り返すことで自然と身に付きます。何度もデバッグを繰り返して、デバッガーとしての腕を磨いていってください。
バックグラウンド実行プログラムのデバッグ
1点だけ、デバッグの基礎知識を追記しておきます。
ABAPのデバッグは、バックグラウンド処理で行われるプログラムをデバッグすることができません。
デバッグはオンライン実行時のみ有効です。したがって、バックグラウンド実行以外の処理を許可していないプログラムについては、ちょっとだけ応用知識が必要になります。
バックグラウンド実行とは何か?という方も、合わせてこちらの記事をご覧ください。
デバッグを実行する前に・・・
初心者ほど、いきなりデバッガを立ち上げようとしてしまいますが、誤りです。実際にデバッグをする前に確認するポイントがあります。
簡単に「計算機プログラム」で障害が発生したと仮定してデバッグ前に確認したいポイントを解説しておきます。「1 + 2 = 2」になってしまうバグが発生したとしましょう。
①事象の再現
SAPに限らず、どのシステムにおいても、まずは事象を再現するところが第1歩となります。
デバッグはあくまでもプログラムを追っていく作業ですので、コードが何千行もあるプログラムを1からデバッグすることは困難を極めるためです。したがって、デバッグを行う前提として事象を再現しておく必要があります。
これが、効率よくデバッグを行う第1ステップとなります。
本当に「1 + 2 = 2」になるのか?同じ事象を再現しておき、このデータをもとにデバッグをしていきます。
②設計書確認
プログラムのバグ発生箇所を特定するために、設計書を読み込みます。
何度も述べますが、何千行とあるプログラムを1行1行追っていくのはかなり大変です。凄腕ABAPerであれば話は別ですが、基本的には設計書なしでプログラムを1行1行追っていくデバッグでは調査完了までに相当な時間を要するでしょう。
そのため、どこらへんにあたりがありそうか?というのをあらかじめ見つけておくのが得策です。
今回の例でいえば、実際の計算式に言及されている個所を事前に洗い出しておくのです。
③デバッグ
①と②で収集した情報をもとに実際にデバッグしていきます。
再現されたデータを入力し、プログラムを実行します。変数やテーブルに入っている値を確認していき、バグを発見する流れです。いきなりデバッガを立ち上げるのではなく、十分準備を行ってからデバッグの作業に取り掛かるようにしましょう。
ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!