この記事を読むメリット
- ブレイクポイントやウォッチポイントの使い方が分かる
ABAPデバッグを行ううえで、最もよく使う機能のひとつが ブレイクポイント です。
ブレイクポイントを設定すると、プログラムの実行を任意の位置で一時停止できます。
これにより、処理の流れや変数の値を確認しながら、不具合の原因や想定外の動作を調査できます。
また、ブレイクポイントと似た調査機能として ウォッチポイント があります。
ブレイクポイントが「指定した行に到達したら止まる」機能であるのに対し、ウォッチポイントは「指定した変数の値が変わったら止まる」機能です。
本記事では、まずブレイクポイントの基本的な考え方や種類、設定方法を中心に説明し、補足としてウォッチポイントの使い方も紹介します。
デバッグ以外にも不具合調査の方法はあるぞい!
次の記事を参考にするのじゃ!
この記事のポイント
ブレイクポイントとは
ブレイクポイントとは、プログラムの実行を一時停止させるための目印です。
通常、ABAPプログラムは上から下へ連続して実行されます。
しかし、特定の行にブレイクポイントを設定しておくと、その行に到達したタイミングで処理が停止し、ABAPデバッガが起動します。
たとえば、以下のようなコードがあるとします。
SELECT SINGLE *
FROM vbak
INTO ls_vbak
WHERE vbeln = lv_vbeln.
IF sy-subrc = 0.
PERFORM update_data.
ENDIF.
この場合、SELECT SINGLE の直後にブレイクポイントを設定しておくと、
データ取得後の SY-SUBRC や LS_VBAK の内容を確認できます。
ブレイクポイントを使う目的
ブレイクポイントは、次のような場面でよく使用します。
- 処理が想定した場所を通っているか確認したい
- IF文の条件分岐に入るか確認したい
- SELECT文の結果を確認したい
- 変数の値がどこで変わるか確認したい
- エラーメッセージが出る直前の状態を見たい
- 標準トランザクションの処理の流れを追いたい
特に、エラー原因を調査する場合は、やみくもに F5 や F6 で進めるのではなく、確認したい処理の直前・直後にブレイクポイントを置くことで、効率よく調査できます。
ブレイクポイントの種類
ABAPデバッグでよく使うブレイクポイントには、主に以下の種類があります。
1. セッションブレイクポイント
セッションブレイクポイントは、現在のSAP GUIセッション内で有効なブレイクポイントです。
自分が今開いているSAP GUI画面から実行する処理を止めたい場合に使用します。
通常のABAP開発や標準トランザクションの調査では、まずセッションブレイクポイントを使うことが多いです。「自分が今操作している画面の処理を止めたい」場合は、基本的にこの種類を使うと考えてよいです。
特徴
- 現在のログオンセッションで有効
- SAP GUIから直接実行する処理に向いている
- 一時的な調査に使いやすい
- セッションを終了すると基本的に無効になる
2. 外部ブレイクポイント
外部ブレイクポイントは、SAP GUI以外の経路から呼び出される処理を止めるために使います。
例えば、以下のような処理では、通常のセッションブレイクポイントでは止まらない場合があります。
- SAPUI5 / Fiori から呼ばれる OData
- 外部システムから呼ばれる RFC
- Webサービス経由の処理
- 別セッションで実行される処理
このような場合に使用するのが、外部ブレイクポイントです。
特徴
- 外部呼び出しや別セッションの処理を止めるために使う
- 実行ユーザに対して有効
- SAPUI5 / Fiori / OData / RFC の調査でよく使う
- 有効期限が設定される場合がある
ブレイクポイントの設定方法
1. 基本操作
基本的に、ABAPエディタやデバッガ画面から処理を止めたい行の左端をクリックするか、ブレイクポイントボタンを押下することでブレイクポイントが設定されます。
SAP ブレイクポイント
2. メッセージでのブレイクポイント設定
処理を止めたい場所がすぐに見つからないときは、次のデバッガ画面から特定の処理に対して自動でブレイクポイントを設定することができます。今回はエラーメッセージ番号がわかっており、その場所で止めたい場合によく使用する方法を例にとって解説していきます。
簡単な例として、以下のようなエラーメッセージが出力されている場所でブレイクポイントを設定したいとします。
手順
- デバッガ画面を開く(/hなどで)
- メニューバー > ブレイクポイント > ブレイクポイント位置 > メッセージでのブレイクポイント
- メッセージID・番号を入力
- Enterを押下
ブレイクポイントを設定後はF8(続行)を押すことで、設定したブレイクポイントまで進めることができます。
何らかの処理に対してエラーメッセージが出力されたことをきっかけにデバッグを試みることが多いと思いますが、その際にエラーメッセージが出力されているところを効率的に特定することができる方法です。その付近からエラーになっている根本原因の箇所を特定することがおススメです。
メッセージ以外にも他のタブにあるABAP命令やMETHODからブレイクポイントを設定することも可能です。例えば、COMMITしている箇所に一括でブレイクポイントを設定することができます。
3. ブレイクポイントに条件を追加する方法
通常のブレイクポイントは、その行に到達するたびに停止します。
しかし、LOOP処理などで大量のデータを処理している場合、毎回止まってしまうと調査が大変です。
そのような場合に便利なのが、条件付きブレイクポイントです。
ブレイクポイントに対して条件を追加することで、指定した条件を満たした場合だけ処理を停止させることができます。
LOOP AT lt_vbak INTO ls_vbak.
IF ls_vbak-vbeln = lv_vbeln.
PERFORM check_order.
ENDIF.
ENDLOOP.
このLOOPで、特定の受注伝票番号だけ確認したい場合は、以下のような条件を設定します。
LS_VBAK-VBELN = '0000123456'
これにより、対象の伝票番号を処理しているときだけ停止できます。
手順
- デバッガ画面においてブレイクポイントを指定した状態でブレイクポイントのタブを開く
- 対象のブレイクポイントの条件を押下
- 条件を入力
- Enterを押下
4. ブレイクポイントの削除
ブレイクポイントは、アイコンをクリックすることで簡単に削除することができます。
また、セッションブレイクポイントの場合は、基本的にセッションを閉じればすべて削除されます。
しかし、外部ブレイクポイントの場合はそのまま残ってしまうため、削除してあげる必要があります。
ABAPエディタから以下の様に、全ブレイクポイントを照会し、一括で削除することができます。
ブレイクポイントが止まらない場合
その行が実行されない
ブレイクポイントを設定したのに止まらない場合、いくつかの原因が考えられますが、
最も多い原因は、そもそもその行が実行されていないことです。
設定したブレイクポイントで止まらないときは以下を確認しましょう。
確認ポイント
- IF条件に入っているか
- 対象のFORMやメソッドが呼ばれているか
- 別の処理ルートを通っていないか
- 画面操作が想定した処理を発生させているか
実行ユーザが異なる
外部ブレイクポイントで止まらない場合、特によくある原因は 実行ユーザが違う ことです。
たとえば、FioriやODataでは、自分のSAP GUIユーザではなく、別の通信ユーザやサービスユーザで処理が実行されている場合があります。
その場合、自分のユーザに外部ブレイクポイントを設定しても停止しません。
まずは、対象処理がどのユーザで実行されているかを確認することが重要です。
因みに、外部ブレイクポイント(External Breakpoint)は、デフォルトでは設定した本人のユーザーIDが指定されていますが、これを以下の手順で「デバッグ対象のユーザーID」に変更することができます。
手順
- ABAPエディタを開く(SE38などで)
- メニューバー > ユーティリティ > 設定 > ABAPエディタ > デバッグ タブ
- 「ユーザー」欄に、処理を止めたい他のユーザーのIDを入力して保存
- その状態でソースコード上に外部ブレイクポイントを設定
ウォッチポイントとは
ここまでブレイクポイントについて説明してきましたが、別の調査方法として ウォッチポイント があります。
ウォッチポイントは、指定した変数の値が変化したタイミングで処理を停止する機能です。
ブレイクポイントが、「この行まで来たら止める」という考え方であるのに対して、
ウォッチポイントは、「この変数が変わったら止める」という考え方です。
ウォッチポイントを使う場面
ウォッチポイントは、次のようなケースで便利です。
- 変数の値がどこで変わっているか分からない
- ステータスがいつ変更されたか調べたい
- フラグがどこで立っているか確認したい
- 金額や数量が途中で想定外の値に変わる
- 構造の特定項目がいつ書き換わるか知りたい
たとえば、lv_statusという変数があるとします。
処理の途中で lv_statusが想定外の値に変わっているが、どこで変更されたのか分からない場合、lv_statusにウォッチポイントを設定します。
すると、lv_status の値が変更されたタイミングで処理が停止します。
| 機能 | 止まる条件 | 向いている調査 |
|---|
| ブレイクポイント | 指定した行に到達したとき | 処理の流れを確認したい |
| 条件付きブレイクポイント | 指定した行で条件を満たしたとき | 特定データだけ確認したい |
| ウォッチポイント | 指定した変数の値が変わったとき | 値がどこで変わったか知りたい |
ブレイクポイントとの違い
ウォッチポイントの設定方法
手順
- デバッガ画面を開く
- ウォッチポイント登録ボタンを押下
- 監視したい変数名を入力する
- 必要に応じて条件を指定する
- Enterを押下
ウォッチポイントを設定したら、F8 などで処理を続行します。
その後、監視対象の変数が変更されると、ABAPデバッガが自動的に停止します。
このように、ウォッチポイントは、どの処理で値が変わったのか分からない場合や、ステータス・フラグの変更箇所を調べたい場合に有効です。
ただし、頻繁に変更される変数に設定すると何度も停止するため、条件を付ける、または構造項目など確認対象を絞ると使いやすくなります。
ブレイクポイントとウォッチポイントを使い分けることで、ABAPデバッグの調査効率を大きく上げることができます。
まとめ
ブレイクポイントは、ABAPデバッグで処理を効率よく確認するための基本機能です。
まずは、通常のブレイクポイントやセッションブレイクポイントから使い始めると理解しやすいです。
慣れてきたら、外部ブレイクポイントや条件付きブレイクポイントを使うことで、より効率的に調査できます。
また、値がどこで変わったか分からない場合は、ウォッチポイントも有効です。
ブレイクポイントは「処理位置で止める」、ウォッチポイントは「値の変化で止める」と考えると、使い分けがしやすくなります。
デバッグでは、ただ1行ずつ処理を追うのではなく、
どこで止めるか、何を確認するかを決めてからブレイクポイントを設定すること が大切です。
この記事が、ABAPデバッグを始める方の参考になればうれしいです。
あわせて読みたい
【SAP ABAP】デバッグの基本操作について徹底解説!
この記事を読むメリット SAPでのデバッグの概要が分かる デバッグ方法を習得できる ブレークポイントやウォッチポイントの使い方が分かる SAPで開発や調査をしていると…