ABAP

【ABAP】5分で学ぶ―デバッグ(DEBUG)の手順

ABAPのデバッグ方法を初心者向けに整理し、解説しています。

時と場合によって、また人によってデバッグの仕方や主義が多少異なりますが、もっとも一般的なデバッグの方法を知っていることはABAPをコーディングしていく上でかなり重要です。

このページでは、ABAPにおける基本的なデバッグ方法を画像付きで説明します。

このページで学べる内容

  • デバッグの実行手順/デバッガの起動方法
  • デバッグに関する基本用語 / 概念
  • 便利な小技(ショートカットなど)
  • デバッグをする前に・・・?

ABAPerであれば、絶対に知っておきたい内容ばかりですので、是非最後までご覧ください。

それでは早速解説を始めます。

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

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

システムに障害が発生した際や、コーディング後想定通り処理が動かない場合、なぜそのバグが起こったのか?を確認する必要があります。確認の手段として、実際のプログラムを1ステップずつ実行しながら、その時の変数の値・構造/内部テーブルに格納されているレコードを確認する方法が、デバッグ(DEBUG)です。

また、単体テスト(プログラムテスト)においても、デバッガを利用してテストを実施するケースがあります。ABAPerであれば、最低限の手順を知っていないと痛い目を見るものでもあります。

デバッグの仕方

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

  1. ブレークポイントの設置
  2. プログラムの実行
  3. 変数/構造/内部テーブルの値の確認

が大まかなステップです。まずは、ブレークポイントの設置から。

ブレークポイントの設置

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

SE38:ABAPエディタ第1画面

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

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

ブレークポイントとは?

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

ブレークポイントとは、プログラムをストップさせるポイントのことを言います。ブレークポイントを設定した場合、その行の処理に入る直前でプログラムがストップします。

例えば・・・

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

この場合、プログラムは処理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」が格納されていることが分かります。

デバッグはこのように見てみるとかなり単純な作業のため、手順自体はだれでも理解することができます。デバッグのツボは、この手順を何度も何度も繰り返すことで自然と身に付きます。何度もデバッグを繰り返して、デバッガーとしての腕を磨いていってください。

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

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

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

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

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

デバッグを実行する前に・・・

初心者ほど、いきなりデバッガを立ち上げようとしてしまいますが、誤りです。実際にデバッグをする前に確認するポイントがあります。

簡単に「計算機プログラム」で障害が発生したと仮定してデバッグ前に確認したいポイントを解説しておきます。「1 + 2 = 2」になってしまうバグが発生したとしましょう。

①事象の再現

SAPに限らず、どのシステムにおいても、まずは事象を再現するところが第1歩となります。

デバッグはあくまでもプログラムを追っていく作業ですので、コードが何千行もあるプログラムを1からデバッグすることは困難を極めるためです。したがって、デバッグを行う前提として事象を再現しておく必要があります。

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

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

②設計書確認

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

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

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

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

③デバッグ

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

再現されたデータを入力し、プログラムを実行します。変数やテーブルに入っている値を確認していき、バグを発見する流れです。いきなりデバッガを立ち上げるのではなく、十分準備を行ってからデバッグの作業に取り掛かるようにしましょう。