ABAP開発では、デバッガを使いこなせるかどうかで生産性が大きく変わります。標準プログラムのソースを読める環境では、SAPの内部処理を追いかけることもできます。
デバッガの起動方法
| 方法 | 操作 |
|---|---|
| ブレークポイント | ソースコードで停止位置を指定 |
| コマンド欄に /h | 次の処理からデバッガが起動する |
| BREAK-POINT文 | ソースに直接書く(本番へ移送しないこと) |
| BREAK ユーザー名 | 特定ユーザーのみ停止する |
| SE38から実行 | デバッグ実行を選択 |
ブレークポイントの種類
| 種類 | 内容 |
|---|---|
| セッションブレークポイント | ログオン中だけ有効。最も一般的 |
| 外部ブレークポイント | RFCやWeb Dynproなど別プロセスの処理でも停止 |
| ステートメントブレークポイント | 特定のABAP命令(例:SELECT)で停止 |
| 例外ブレークポイント | 特定の例外クラスが発生したときに停止 |
| サブルーチン/メソッドブレークポイント | 特定の処理単位の入口で停止 |
ステートメントブレークポイントは、「どこかでMESSAGE文が発行されているが、場所が分からない」という調査に有効です。MESSAGE文で停止する設定にすれば、エラーメッセージの発生箇所を特定できます。
ウォッチポイント
ウォッチポイントは、変数の値が変わったときに停止する仕組みです。「この変数がいつの間にか変わっている」という調査に使います。
条件を指定することもできます。「lv_countが100になったら停止」といった設定により、大量のループの中の特定の状況だけを捕まえられます。
ショートダンプの読み方
プログラムが異常終了すると、ショートダンプ(実行時エラー)が記録されます。ST22で確認します。
| 項目 | 内容 |
|---|---|
| 実行時エラー名 | エラーの種類。原因の分類 |
| エラー分析 | 何が起きたかの説明 |
| ソースコード抜粋 | エラーが発生した行とその周辺 |
| ユーザーと端末 | 誰が実行したか |
| アクティブ呼出 | コールスタック。どこから呼ばれたか |
| 内部注記 | システム内部の詳細情報 |
| エラー名 | 原因 |
|---|---|
| CX_SY_CONVERSION_NO_NUMBER | 数値に変換できない文字列を計算に使った |
| CX_SY_ZERODIVIDE | ゼロで除算した |
| CX_SY_ITAB_LINE_NOT_FOUND | テーブル式で行が見つからなかった |
| CX_SY_REF_IS_INITIAL | 初期値の参照変数でメソッドを呼んだ |
| TIME_OUT | 実行時間が上限を超えた |
| DBIF_RSQL_SQL_ERROR | SQLの実行に失敗した |
| MESSAGE_TYPE_X | タイプXのメッセージが発行された |
メッセージによるエラー通知
MESSAGE文は、ユーザーにメッセージを表示する命令です。タイプによって挙動が大きく異なります。
| タイプ | 意味 | 挙動 |
|---|---|---|
| S | 成功 | ステータスバーに表示。処理は続行 |
| I | 情報 | ダイアログ表示。OKで続行 |
| W | 警告 | 入力画面へ戻る。修正すれば続行可 |
| E | エラー | 入力画面へ戻る。修正必須 |
| A | 中止 | 処理を打ち切る |
| X | 終了 | ショートダンプを発生させる |
" メッセージクラスから発行
MESSAGE e001(zmm) WITH lv_matnr.
" 変数に受け取る(表示しない)
MESSAGE e001(zmm) WITH lv_matnr INTO DATA(lv_msg).
" 例外として送出
MESSAGE e001(zmm) WITH lv_matnr
RAISING material_not_found.性能分析のツール
| Tコード | 用途 |
|---|---|
| ST05 | SQLトレース。実行されたSQLと所要時間を記録 |
| SAT(旧SE30) | ABAPランタイム分析。処理時間の内訳を可視化 |
| ST22 | ショートダンプの一覧と詳細 |
| SM50 / SM66 | プロセスの状態監視。長時間処理の特定 |
| SLG1 | アプリケーションログの参照 |
| ST12 | 統合トレース(SQLとABAPを同時に) |