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

RDi V9.6 パート10、デバッガーの機能強化

Susan Gantner 著

またまたRDi V9.6の話題です。RDi V9.6で追加された機能強化には、取り上げるべきものがまだまだあるようで、今回は、デバッガーの機能が強化されました。9.6.0.7修正パックには、デバッガー向けの新機能がいくつか含まれています。

今回、強化された機能、すなわち、非常に大きな変数の値を表示する機能と、サービス エントリー ポイント(SEP)への条件の追加は、どちらも人気の高いRFE(機能拡張の要望)でした。これらは、RFEのプロセスがきちんと機能しているというさらなる証明と言えるでしょう。RFEサイトを訪問して、RDi向けに提案されている気に入った機能に投票をしたことがない方は、今すぐにでも訪問してみてください。あるいは、この記事を読み終えてからでもよいかもしれませんが。

大きな値を表示する

RPGプログラムで非常に大きな変数を扱う場合、たとえば、XMLまたはJSONドキュメントを生成または処理する場合には、現在の変数の内容を調べようとして、RDiの「モニター」ビューの制限事項に突き当たってしまうことがよくあるのではないでしょうか。表示できる最大長の値の制限が、4096文字から30,720文字へと増やされました。これは、大きなフィールドを持つそうした一部のプログラムをデバッグする際に大いに助けになると思われます。

この強化機能を利用するに当たっては、留意すべき点がいくつかあります。まず、ホストIBM iシステムはV7.3以上である必要があります。次に、製品5770SS1では、以下のPTFがインストールされている必要があります。

  • V7R3M0 PTF SI71302
  • V7R4M0 PTF SI71314

図1:「モニター」ビューでの大きな値の表示

次に行う必要があるのは、RDiの「モニター」ビューが新しいより大きなサイズを表示できるように設定を行うことです。図1では、VERYBIGVARを選択しているのが分かると思います。ビューの下部でその値を確認することができます。ただし、必要なPTFをシステムにインストールした後なので、4,096文字を超える表示も可能でしたが、10,000を超える文字はやはり表示されませんでした。「モニター」ビューのあの広い表示領域にも表示可能な最大長があり、デフォルトで10,000に設定されている、ということだったようです。図1に示したように、表示領域を右クリックすると、コンテキスト メニューが表示されるので、それを使用して表示可能な最大長を設定することができます。

そのダイアログ ボックスを図2に示します。「0 = unlimited」(無制限)という記述に惑わされないようにしてください。0に設定した場合でも、ここで表示できる最大サイズ値は30,720です。ここでは35,000に設定してみることにしました。制限値が上がったとしたら、忘れずにここに戻って変更するようにしなければなりません。試しに非常に大きな値を入力してみたところ、RDiからの応答として、フォントが小さくなってしまったため、実際の制限に従うこととしました。

図2: 最大長の設定ダイアログ

そのような最大長を設定する方法を調べることを余儀なくされたことで、ある意味よかったこともありました。というのは、最大長オプションと同じコンテキスト メニューに、テキストの折り返しを有効にするオプションを見つけられたからです。折り返しを有効にすることで、大きな値を見やすくすることができます。折り返しを使用していなかったときは、非常に長い1行の値を見るために何度もスクロールしていました。

テキストの折り返しを使用しても、あの小さなボックスは、大きな値を見やすく表示するにはかなり狭いです。しかし、言うまでもありませんが、他のRDiビューと同様に、「モニター」タブでダブルクリック(または最大化ボタンを使用)することで、フルスクリーン表示で表示することができます。下の図3に、より大きな値をずっと見やすくする表示のしかたの例を示します。私のテストでは、大きな変数の値を変更して、どのような文字に注目しているかざっと分かるようにしています。つまり、現行位置の番号が50文字間隔で入るようにしました。しかし、結局のところ、変数の先頭からのオフセット位置は、どのみちデバッグ パースペクティブ画面の下部に表示されます(図3を参照)。スクリーン ショットでは、私のカーソル位置は見えませんが、赤色の矢印はカーソルがあった位置(7000の位置)を指しており、これは、RDiによって画面下部の数字でも表されています。

図3: フルスクリーン表示の「モニター」ビュー

通常は、デバッグ セッション中に変数の値を変更できますが、これらのより大きな変数はその例外です。「モニター」で更新できるのは、長さが4,096以下である変数のみです。

条件付きサービス エントリー ポイント

サービス エントリー ポイント(SEP)を使用したデバッグは、RDiデバッグ セッションの開始を簡素化することができます。SEPを使用すると、IBM iホストは、特定のプログラムを開始する特定のユーザー プロファイルを監視します。システム上のいずれかのジョブで何かが起こると、SEPプロセスはプログラムを停止し、デバッグ モードに移行させてから、RDi内のプログラムでデバッグ モードに移行することによって、SEPを設定した開発者に通知します。SEPの詳細については、以前に記したこちらの記事「 デバッグを簡素化する3つの単語」を参照してください。

多くの状況では、SEPは何ら問題なく機能します。しかし、特にWebサーバーまたはデータベース サーバー ジョブなどのサーバー ジョブでは、プログラムを呼び出すのに汎用ユーザー プロファイルが使用されることもあります。そうした汎用プロファイルを使用してSEPを設定することもできますが、いずれかのユーザーがコードを実行すると、SEPが作動してそれぞれのジョブを停止し、デバッグの準備ができたことを開発者に通知することになります。SEPは、デバッグしようとした1つのセッションだけでなく、多数のデバッグ セッションを開始することもできます。

SEPがより具体的な状況でトリガーする仕組みを提供するために、9.6.0.7では、SEPに条件を指定するオプションが加えられました。この動作のしかたは、条件付きブレークポイントに非常によく似ています。SEPが制御を得るのはプログラムまたはプロシージャーの開始時のみである(それゆえ名前は「エントリー ポイント」です)ため、条件は、プログラムまたはプロシージャーPの実行開始前に真でなければなりません。そのため、条件は、多くの場合、プログラムまたはプロシージャーに渡されている1つ以上のパラメーターの値に基づくものということになります。

たとえば、プログラムでSEPを設定して、SEPの条件にCustNo = 1234を指定するとします。この場合、CustNoはプログラムへの入力パラメーターです。SEPで指定されたユーザー プロファイルがプログラムを呼び出すと、システムはまずCustNoの値をチェックします。その値が1234である場合、SEPがトリガーし、そのジョブおよびプログラムはデバッグ モードになります。プログラムの開始時にCustNoの値がそれ以外の値である場合、SEPはそれを無視します。

新たなプロンプト オプションを使用して、リモート・システムからSEPを開始するときに条件を設定することもできますし、あるいは、これまでと同じように、条件付きでないSEPを設定してから、「IBM i サービス・エントリー・ポイント」ビューに表示された後に(コンテキスト メニューを使用して)SEPを修正して条件を入力することもできます。1つの条件でプログラムがデバッグされた後で、異なる値でトリガーするように条件を変更することもできます。新たなSEPを設定する必要はありません。図4に、条件が指定された「IBM iサービス・エントリー・ポイント」ビューを示します。

図4:条件付きサービス エントリー ポイント

前述したモニターの機能強化と同様に、この機能はIBM i 7.3以降を稼働時のみ利用可能であり、有効化するには以下のPTFが必要です。

  • V7R3 PTF SI70844
  • V7R4 PTF SI70888

あわせて読みたい記事

PAGE TOP