みなさん、プログラムに不具合があるとSTRBGやSTRISDBコマンドを使用してデバックをしているかと思います。ブレイクポイントを設定し、変数の中身を確認していることでしょう。今回はこのデバッグコマンドを使用した、ちょっと変わった便利な使い方をお伝えします。
最近はLPAR区画が用意され、本番環境とテスト環境が別々になっていることも増えました。しかし1区画しかなく、ライブラリで本番とテストを分けている環境もまだまだ多くあります。
この環境で開発テストする場合に不安なのが、本番環境ライブラリのデータを誤って更新してしまわないかということです。ライブラリリストをしっかり設定していれば基本的に安心なのですが、途中でCLがCALLされていてCHGLIBLなどでライブラリリストが変更される、とか、OVRDBFコマンドで明示的に本番環境ライブラリが指定されている、といった想定外の事故が起きる場合があります。
このような事故を防ぐためにSTRDBGコマンドを活用します。ポイントはSTRDBGコマンドの実働ファイルの更新(UPDPROD)パラメータを*NOにすることです。
新人の頃、このパラメータは*YESにすること!と教わったので、深い意味は考えたことがありませんでしたが、これが魔法のパラメータでした。
このパラメータはライブラリのタイプがPRODの場合にデータの更新を許可するかどうか、というものになります。
CRTLIBでライブラリを作成する場合にライブラリタイプの指定があります。デフォルトは「PROD」なので、意識しなければPRODタイプのライブラリが作成されます。
ここでポイントとして、テスト用ライブラリを作成する場合はライブラリタイプを「TEST」で作成します(既に存在する場合はCHGLIBコマンドで変更可能)。
「TEST」で作成されたライブラリのデータはUPDPROD *NOでも更新されますが、「PROD」で作成されたライブラリのデータを更新しようとすると、デバッグの停止線メッセージが表示され更新が中断されます。
STRDBGコマンド使用時はプログラムを指定する必要はありません。
STRDBG UPDPROD(*NO)
これだけでOKです。
実際、STRDBG UPDPROD(*NO)のおかげで本番環境への更新を防げたことがありました。
もし、STRDBGで助かった場合は「STRDBG 最高!!」と叫んでください!(笑)。
ちなみにQTEMPはTESTタイプのライブラリです。一時的なテストデータであれば、QTEMPに作成してもSTRDBGの恩恵は受けられます。
最後に注意点としては、環境によってはSTRDBGのデフィルト値がUPDPROD(*YES)に変更されている場合があります。これはテスト環境でもデバッグ時に*YESにするのが面倒だからだと思います。
明示的にUPDPROD(*NO)と入力しましょう!!
IBM iつれづれ草
第4回 IBM iの小ネタシリーズ 第1回~画面(DSS)周りのカーソル制御