この記事を読むメリット
- SAPでのデバッグの概要が分かる
- デバッグ方法を習得できる
- ブレークポイントやウォッチポイントの使い方が分かる
SAPで開発や調査をしていると、
「この値はどこでセットされているのか」「なぜ想定どおりに動かないのか」「どの処理を通ってこの結果になったのか」を確認したい場面がよくあります。
そのようなときに欠かせないのが デバッグ です。
デバッグを使うことで、プログラムの実行を途中で止めながら、変数の中身や処理の流れを確認できます。
特にABAP開発や標準調査では、ソースコードを読むだけでは原因を特定しきれないことも多く、
実際に処理を止めて確認すること が問題解決の近道になることがあります。
この記事では、SAPにおけるデバッグの基本的な考え方から、代表的なデバッグ方法、関連トランザクション、調査時に知っておくと便利な情報まで、実務目線で整理して解説します。
デバッグ以外にも不具合調査の方法はあるぞい!
次の記事を参考にするのじゃ!
この記事のポイント
概要
SAPのデバッグとは、ABAPプログラムの実行中に処理を一時停止し、
その時点の変数、内部テーブル、呼び出し元、分岐条件、実行順序などを確認する作業です。
たとえば、次のような場面で役立ちます。
- 入力した値がどこで変更されたか調べたい
- エラーの原因箇所を特定したい
- 標準処理の流れを理解したい
- SELECT結果や内部テーブルの中身を確認したい
- ユーザEXIT、BAdI、拡張ポイントが呼ばれているか確認したい
SAPのデバッグで大切なのは、
単に「止めること」ではなく、どのタイミングで止めて、何を確認したいのかを明確にすること です。
調査の目的が曖昧なままデバッグを始めると、標準処理の深いところまで迷い込みやすくなります。
そのため実務では、まず
- どのトランザクションで再現するのか
- どの入力値で再現するのか
- どの時点の値を見たいのか
を整理してからデバッグを始めるのがおすすめです。
デバッグの手順
デバッグを行うときは、主に次の流れで進めます。
手順
- 処理を止める場所を決める
- デバッグを起動する
- 対象の処理を実行する
- デバッグを行う(処理内容を見ていく)
- デバッグを終了する
手順1. 処理を止める場所を決める
暴騰説明した通り、やみくもにデバッグをするのは非効率的です。
そこでブレイクポイントやウォッチポイントを設定し、処理をストップさせる場所を決める必要があります。実は、この部分がデバッグにおいて非常に大事なポイントです。
本記事では、デバッグの基本操作について解説しますので、詳しい処理の止め方は以下の記事を参考にしてください。
関連記事(ブレイクポイント・ウォッチポイントの設定方法)*近日、公開予定
手順2.デバッグを起動する
対象の処理、またはトランザクション画面を開いた状態で、コマンドフィールドに /h を入力し、Enter を押下します。
/h を入力すると、すぐにデバッガ画面が表示されるわけではなく、次の画面操作からデバッグが有効になります。そのため、/h 入力後に Enter、保存、実行などのアクションを行うと、そのタイミングでデバッガが起動します。
この方法以外にも、対象プログラムが分かっている場合は、SE38 でプログラム名を入力し、デバッグ実行することもできます。
また、汎用モジュールを確認したい場合は、SE37 から対象の汎用モジュールを開き、テスト実行時にデバッグを行うことができます。
下図の例では、受注伝票登録画面(T-CODE:VA01)を起動し、必要な値を入力した後に /h を入力してデバッグを有効化しています。
手順3.対象の処理を実行する
次に、確認したい処理が動くように、実行ボタンや Enter を押下します。
すると、新しくデバッガ用のウィンドウが表示され、処理を途中で止めながら確認できる状態になります。
このとき、手順1で事前にブレークポイントを設定しておくと、対象の処理がそのブレークポイントに到達した時点で停止します。
ブレークポイントを設定していない場合でも、/h によってデバッグは開始されますが、標準処理の入口など、想定より手前の処理で停止することがあります。
デバッグ画面では、ソースコード、現在停止している行、呼び出し元の情報、変数の値などを確認できます。
また、デスクトップ1 や 標準 などのタブは、デバッガ画面のレイアウトを切り替えるためのものです。必要に応じて、自分が見やすい配置に変更することもできます。
上図の例では、受注伝票登録画面で値を入力した後に Enter を押下しているため、プログラム SAPMV45A の PAI 処理からデバッグが開始されています。
PAI は Process After Input の略で、ユーザが画面に値を入力した後や、Enter・保存・実行などのアクションを行った後に実行される画面処理です。
つまりこの例では、VA01 画面で入力された値に対して、SAPがどのようなチェックや後続処理を行っているかを確認できます。
手順4.デバッグを行う
デバッグの基本操作
左上のボタンで処理を進めていきますが、通常 ファンクションキーを使用します。
デバッグの基本操作
- F5:シングルステップ
- 現在の行を1行実行します。
- FORM、FUNCTION MODULE、METHOD などの呼び出しがある場合、その中に入って処理を追います。
- F6:実行
- 現在の行を1行実行しますが、FORM、FUNCTION MODULE、METHOD の中には入りません。
- 呼び出し処理を1行として実行します。
- F7:リターン
- 現在入っている FORM、FUNCTION MODULE、METHOD などを抜けて、呼び出し元に戻ります。
- F8:続行
- 次のブレークポイントまで処理を進めます。
- もちろん、通らない処理のブレイクポイントは無視されます。
- ブレイクポイントがなければ、プログラム終了または次の画面まで進みます。
単一変数の確認方法
ソースコード上の単一変数をダブルクリックすると、右側に表示されます。もし、その変数の中身が入っていれば下図のように値が表示されます。
また、システム予約語のようなソースコードに表示されていない変数の中身を確認したい時は、直接右側に確認したい変数名を入力することで、その時点の値を表示できます。余談ですが、よく判定で使用されるSY-SUBRCとSY-TABIXは常に右上に表示されています。IF文で分岐に入らないときは、SY-SUBRCのような分岐で使用されている変数を見て状況を確認してみましょう。
変数の値変更は、鉛筆マークを押下することで変更可能じゃ。
ロジックを確認する際に、値を変更して処理の挙動を確認する時に有効じゃの。
構造・内部テーブルの確認方法
構造や内部テーブルの確認方法は、基本的には単一変数と同じです。
しかし、中身のデータを単一変数のように同じタブ上で表示することはできない為、下図のようにダブルクリックすることで、構造またはテーブルタブに遷移し、詳細な値を一覧で確認することができます。
下の画面では、構造名TVAKの中身を一覧で確認しています。
値の変更は、単一変数と同様に鉛筆マークから変更可能です。
また、特定項目だけ確認したい場合は、「TVAK-AUART」のように構造名(またはテーブル名)+ハイフン+項目名を変数フィールドに指定すれば確認できます。
よくあるケースですが、SELECTの結果を格納する内部テーブルのデータを確認した時に、何も値がはいっていない(=SELECTでデータを取得できていない)場合は、条件に使われている変数の値を確認し、想定通りのSELECTが行われているか確認しましょう!
手順5.デバッグを終了する
確認したい処理が終わったら、デバッグを終了します。
ただし、デバッグの終了方法にはいくつか種類があり、処理を続行するのか、処理自体を中断するのかを意識して操作することが大切です。
処理続行による終了操作
よく使われるのがF8 による処理続行です。
F8は「次のブレークポイント、または処理終了まで進める」操作であり、ブレークポイントが残っていない場合は、そのまま通常画面に戻ります。
そのため、処理を最後まで進めて問題ない場合は、F8 で進めるのが一般的です。ただ、デバッグセッション自体を終了する操作ではありません。デバッグを完全に抜けたい場合は、メニューの終了操作を使うと分かりやすいです。
デバッガメニューによる終了操作
デバッガのメニューには、終了に関する操作が2種類あります。
1つ目は 「終了(アプリケーション終了)」 です。
これはデバッグだけでなく、現在実行中のアプリケーション処理自体を終了します。
これ以上処理を進めたくない場合や、更新処理に入る前に中断したい場合に使用します。
たとえば、保存処理や COMMIT WORK が実行されると、データベースに変更が反映される可能性があります。それを避けたい時はこの終了の仕方が推奨されます。
2つ目は 「終了(アプリケーション実行継続)」 です。
これはデバッガを終了し、アプリケーション処理はそのまま継続します。
調査が終わり、後続処理を通常通り実行して問題ない場合に使用します。F8と似ていますが、デバッガのセッションが完全に終了する点が異なります。
最後に、デバッガウィンドウ右上の × で閉じることもできますが、環境や状況によって確認ダイアログが表示される場合があります。
意図しない終了を避けるため、処理を止めたいのか、処理を続けたいのかを明確にしたうえで、メニューから終了方法を選ぶのがおすすめです。
まとめ
デバッグは、プログラムを直すためだけでなく、処理の流れを理解するためにも非常に役立ちます。
慣れるまでは難しく感じるかもしれませんが、基本操作を繰り返し使うことで自然と身についていきます。
この記事が、ABAPデバッグを始める方の参考になればうれしいです。