メニューボタン
IBMi海外記事2021.01.13

デバッグを簡素化する3つの単語

Susan Gantner 著

著者まえがき: この記事の元の記事は、2007年3月に掲載されました。現在、RDiとして知られているこのツールセットは、この間に3回、名前が変わっています(2007年当時の名前はWDSCでした)。この十数年の間に、RDiには数多く大きな機能強化が加えられましたが、デバッグ セッションの開始方法については、あまり大きな変更はありませんでした。けれども、現在、コードの編集にRDiを使用しているRPGプログラマーは激増しており、最近になってRPGへ転向してきたプログラマーの多くは、今なおデバッグ セッションの開始方法に奮闘しています。そのため、この記事を再掲する意義は十分あると思われます。併せて、いくつかの名前変更、画像の更新、様々な重要な機能のアップデートについても加筆修正を行っています。

RDiでデバッガーの使い方に苦心していたとき、その分野の専門家であり、その使い方を理解する手助けをしてもらえそうな友人に尋ねてみることにしました。彼女が言うには、3つの単語から成るある言葉さえ知っていれば、デバッグが楽に行えるようになるということでした。その言葉というのは、Service Entry Points(サービス エントリー ポイント)です。彼女の言った通りでした。

サービス エントリー ポイント(SEP)を使用したデバッグの楽しさをご存じないようでしたら、今日こそ行ってみてください。「リモート・システム」ビュー(RSE)で、プログラム オブジェクトを選択します。オブジェクトを右クリックして、「 デバッグまたはコード・カバレッジ (サービス・エントリー)」 -> 「サービス・エントリー・ポイントの設定」を選択します。

数秒間、待たされることもありますが、やがて確認メッセージが表示され、ワークベンチに「IBM i Service Entry Points」ビューが表示されます。プログラム名がサービス エントリー ポイントのリストに表示されます。デフォルトで、プログラム内の*All(すべての)モジュール、プログラム内の*All(すべての)プロシージャー、自分のユーザーIDが設定されています(図1を参照)。

フォルダ
図1:サービス エントリー ポイントのグリッド

このままサービス エントリー ポイントを設定した場合、このプログラムがご自分のユーザー プロファイルによって呼び出されると、RDi内のIBM i デバッガーから、デバッグ パースペクティブへ切り替えるかどうか尋ねられることになります。そこで「はい」と答えた場合(または許可を求める必要はないと指定している場合)は、次のような処理が行われます。

  • RDiのデバッグ パースペクティブが起動し(必要な場合)、フォーカスされます。
  • このプログラムはホスト上でデバッグ モードに移行されます。
  • プログラムのソースがエディターで開かれます(開かれていない場合)。
  • デバッガーは、ユーザー応答を待ってから最初の実行可能ステートメントを実行します。

最初にRDiでデバッグするときは、ホスト上でデバッグ サーバーが起動していないというメッセージが表示されることがあります。その場合、メッセージには、デバッグ サーバーを起動する操作手順が示されています。

サービス エントリー ポイントを設定した後で、別のジョブ(エミュレーション セッションなど)へ移動し、プログラムを呼び出して、自分の目で確かめます。デバッグ セッションが開始されるまで、しばらく時間が掛かる場合がありますが、開始されたら、必要に応じてブレークポイントを追加したり、プログラムをステップ実行して値をモニターしたいフィールドを設定したり、プログラムで特定のステートメントから「ロケーションまで実行」を発行したり、あるいは、RDiデバッグ セッション内でいつも行う他の操作を実行できるようになります。

この方法は、デバッグ セッションを開始するためのかなり簡単な方法だと思います。一番良い点は、対話式セッションからプログラムを実行したいか、バッチへサブミットしたいか、どちらでも構わないというところです。さらに良いことには、このプログラムが、Webサーバー ジョブまたはリモート プロシージャー呼び出しなど、「従来式でない」方法で呼び出された場合に、どのようなジョブがデバッグされる(または「サービスされる」)必要があるのか把握することについて気にする必要はありません。どのような方法であれ、プログラムが私のユーザー プロファイルによって呼び出されるのを待つだけです。そうすれば、自動的にデバッグ モードに移行します。

もちろん、デバッグするプログラムは、自分自身で呼び出すプログラムのみに制限されるわけではありません。リストされているサービス エントリー ポイントを右クリックして「変更」を選択し、ユーザー プロファイルを変更したり、デバッグするモジュールおよびプロシージャーを指定したりすることができます。また、右クリック メニューから、サービス エントリー ポイントを削除したり、一時的に使用不可にしたりすることもできます。これらの操作は、ビューの右上隅のツールバー アイコンから行うこともできます(下の図2を参照)。ここで使用できるもう1つの重要なオプションは、サービス エントリー ポイントの更新です。プログラムが再コンパイルされたら、必ず更新を行う必要があります。

フォルダ
図2: サービス エントリー ポイントの変更

サービス エントリー ポイントは素晴らしいものですが、残念ながら万能薬ではありません。いくつか制限事項があります。一部のショップにとっての最大の制限事項は、ILE言語プログラム(すなわちRPGLE、CBLLE、CLLEなど)を使用している場合にのみ、SEPデバッグ セッションを開始できるということかもしれません。ただし、一度、SEPを使用してデバッグ セッションが開始されたら、以前のRPGまたはCLPタイプを含めて、望みの任意の言語プログラムをステップ インまたはデバッグに追加することができます。

また、エラーのために一時停止されているかどうかにかかわらず、すでに実行されているプログラムで、SEPを使用してデバッグ セッションを開始することはできません。直観に反するように思える制限事項ですが、SEPを使用して現行のRSEサーバー ジョブから呼び出されるプログラムをデバッグすることもできません。また、前述したように、プログラムが再コンパイルされた後で新バージョンをデバッグする場合には、RSEからサービス エントリー ポイントをリフレッシュする必要があることを忘れてはなりません。

SEPを使用してデバッグ セッションを開始することができない環境の場合は、別の方法、すなわちデバッグ構成を作成する方法を使用することができます。その手順の詳細については、 以前に記したこちらの記事を参照してください。

デバッグ設定値を確認する必要があります。それには、RDi設定ダイアログで「IBM i デバッグ」(「実行/デバッグ」の下)を調べます。そこには、あらゆるタイプのデバッグで重要な「実動ファイルを更新する」設定や、サービス エントリー ポイントに対するいくつかの具体的な設定オプションがあります。

Service Entry Pointsという3つの単語で、デバッグ作業がより楽に行えるようになればと思います。また、 デバッグ セッションの開始方法について説明した短い動画も作成しておりますので、ぜひご覧ください。楽しいデバッグ作業になりますように。

あわせて読みたい記事

PAGE TOP