ABAP

【ABAP】超・基本―デバッグ(DEBUG)の手順

ABAPのデバッグ方法を初心者向けに整理しました。

時と場合によって、また人によってデバッグの仕方が異なりますが、もっとも一般的なデバッグの方法を解説します。

前提:デバッグ(DEBUG)とは?

まず前提となる「デバッグ」について基本概念を整理しておきます。

デバッグとは、一言でいえば「プログラムバグを発見する作業」です。

システムに障害が発生した際に、最終的になぜそのバグが起こったのか?をプログラムから追っていくのがデバッグです。

簡単に「計算機プログラム」で障害が発生したと仮定してデバッグの方法を解説したいと思います。「1 + 2 = 2」になってしまうバグが発生したとしましょう。

①事象の再現

いきなりですが、「さあ、さっそくデバッグをしよう!」というのは誤りです。SAPに限らず、どのシステムにおいても、まずは事象を再現するところが第1歩となります。

デバッグはあくまでもプログラムを追っていく作業ですので、コードが何千行もあるプログラムを1からデバッグすることは困難を極めるためです。

したがって、デバッグを行う前提として事象を再現しておく必要があります。

これが、効率よくデバッグを行う第1ステップとなります。

本当に「1 + 2 = 2」になるのか?同じ事象を再現しておき、このデータをもとにデバッグをしていきます。

②設計書確認

プログラムのバグ発生箇所を特定するために、設計書を読み込みます。

何度も述べますが、何千行とあるプログラムを1行1行追っていくのはかなり大変です。凄腕ABAPerであれば話は別ですが、基本的には設計書なしでプログラムを1行1行追っていくデバッグでは調査完了までに相当な時間を要するでしょう。

そのため、どこらへんにあたりがありそうか?というのをあらかじめ見つけておくのが得策です。

今回の例でいえば、実際の計算式に言及されている個所を事前に洗い出しておくのです。

③デバッグ

①と②で収集した情報をもとに実際にデバッグしていきます。

再現されたデータを入力し、プログラムを実行します。変数やテーブルに入っている値を確認していき、バグを発見します。

次章では、SAPで実際にデバッグする方法を画像付きで解説します。

デバッグの仕方

デバッグの手順を順を追って説明します。

まずは、設計書であたりを付けたソースコードの周辺にブレイクポイントを設置します。

ブレイクポイントの設置

トランザクションコード:SE38「ABAPエディタ」、もしくはSE80「オブジェクトブラウザー(開発ワークベンチ)」を開きます。

SE38:ABAPエディタ第1画面

デバッグしたいプログラム名を入力し、ソースコードを照会します。

ソースコードの照会画面に遷移したら、後は「ブレイクポイント」を設置したい行をダブルクリックします。

ブレイクポイントとは?

ブレイクポイントという言葉を初めて聞く人もいるかもしれませんので、少々解説を。

ブレイクポイントとは、プログラムをストップするポイントのことを言います。

ブレイクポイントを設定すると、その行の処理に入る直前でプログラムが止まることになります。

  1. 処理A
  2. 処理B
  3. 処理C ← ここにブレイクポイントを設置

この場合、処理Bが終わり、処理Cが入る前でプログラムがストップします。

つまり、ブレイクポイントは「最も怪しいと思われる処理の直前」に置くのが正しいです。

  1. 処理A
  2. 処理B
  3. (条件が真なら)処理C ←ここにブレイクポイントを設置
  4. 処理D

また、上記のように条件付きでその処理が実行される場合は、「条件に当てはまる場合にのみ」プログラムがストップします。

仮に、条件が「偽」で処理Cがそもそも実行されない場合には、ブレイクポイントを設置していてもブレイクポイントでプログラムはストップしません。

プログラムを実行:(F8)ボタン押下

ブレイクポイントを設置したら、F8ボタンを押下しプログラムを実行します。

もし、ブレイクポイントを設置した行の処理が行われれば、そこでプログラムが一時停止します。

/h

トランザクションコード:SE38からの直接実行の他にトランザクションコード「/h」を用いてデバッガを起動させることができます。こちらは、少しトリッキーな方法のため初心者の方には少し難しい処理かもしれません。

具体的な手順は以下の通りです。

① トランザクションコードに「/h」を入力し、Enterボタンを押下する。

これで、デバッガの起動準備が行われます。

② その状態で、トランザクションコードの実行など、デバッグしたい機能を実行する。

一見簡単そうに見えますが、プログラムが直接トランザクションコードに結びついていないと、そのプログラムを実行することができないのです。

例えば、SE38からプログラムを実行する場合、トランザクションコード:SE38に紐づく「ABAPエディタ」機能のデバッグになってしまいます。このため、「/h」はABAPに慣れるまではあまりお勧めはしません。

デバッグ画面の見方

ここまでで、具体的な手順は終わりです。手順自体は簡単です。ただ、デバッガの画面を使いこなせないと、プログラムを追うことは難しいです。

実際に、デバッグをしてプログラムをストップさせた画面を見て、イメージをつけていきましょう。

左側にソースコードが、右側に変数に格納されている実際の値が表示されます。

※ソースコード中の変数をダブルクリックすることで、右側の変数領域で値を確認することができます。

変数でなくても、構造やテーブルの値も参照することができます。

選択画面でINPUT1、INPUT2に入力された「1」と「2」が正常に格納されていることが分かります。

ただし、ソースコードを見てみると「OUTPUT1」には、それら二つの変数を掛け算するようにソースコードが書かれていることが分かります。

したがって、「1 + 2 = 2」になってしまう原因は掛け算をしてしまっていることが理由であるとわかります。

デバッグはこのように見てみるとかなり単純な作業のため、手順自体はだれでも理解することができます。

デバッグのツボは、この手順を何度も何度も繰り返すことで自然と身に付きます。何度もデバッグを繰り返して、デバッガーとしての腕を磨いていってください。

バックグラウンド実行プログラムのデバッグ

最後に1点だけ、デバッグの基礎知識を追記しておきます。

ABAPのデバッグは、バックグラウンド処理で行われるプログラムをデバッグすることができません。

デバッグはオンライン実行時のみ有効となります。したがって、バックグラウンド実行以外の処理を許可していないプログラムについては、ちょっとだけ応用知識が必要になります。

バックグラウンド実行とは何か?という方も、合わせてこちらの記事をご覧ください。