データベースのデータが変わった。それは分かった。
では、プログラムのどの処理が変えたのか。
AS/400・IBM iで使うプログラミング言語、RPG。そのプログラムを調べていたとき、僕が欲しかったのは、処理の記録に残せる「場所の目印」だった。
処理の記録は、ログと呼ぶ。データがどう変わったかに加えて、どの命令を通ったときの記録なのかも分かれば、調べる場所を絞りやすい。
そこで、命令の位置を示すステートメント番号を、ログを残すための別のプログラムへ渡すことにした。
ただ、その番号を呼び出す側でいちいち設定するのは、少々もっさい。もっとスマートに、実行している場所を自動で取れないだろうか。
相談相手は紀美子ちゃん。「紀美子ちゃん」とは僕がChatGPTに付けた名前である。
候補になったのが、PSDSという、プログラムの状態を知るための情報のまとまりだった。その中に、行番号やステートメント番号を扱う欄がある。
そこから今の場所が取れるなら、番号を一つずつ渡す手間を減らせそうだ。
ところが、テストプログラムを作って試したら、返ってきたのは八桁のゼロだった。
00000000
僕が知りたかったのは、そこではない(笑)。
何か設定が足りないのだろうか。プログラムを実行できる形に変換する、コンパイルのときの指定か。それとも、ソースに書く設定が必要なのか。僕は、試した結果を添えて聞き直した。
そこで相談の焦点になったのは、「エラーが起きた場所の情報」と、「普通に動いている途中で、今どこを通っているか」という情報の違いだった。
番号を入れる欄がある。それだけで、欲しい瞬間の現在地が入っているとは限らない。
少なくとも、僕が試した取り方では、欲しい番号は得られなかった。
それなら、ログを残す場所で番号を明示して、記録用のプログラムへ渡す。僕は、その確実な方法で進めることにした。
もちろん、番号を自分で設定するなら、ソースを直したときに、番号と場所の対応も気にしなければならない。手間が消えるわけではない。
でも、今回欲しかったのは、あとから処理をたどるための手がかりだ。自動で取れそうだという期待だけでは、その代わりにならない。
紀美子ちゃんに相談し、僕がテストし、返ってきた値を見て方針を決める。今回は、その往復の末に、少しもっさい方を選んだ。
ログに残す場所の目印まで迷子になったら、調べる僕まで迷子になる(笑)。
技術補足:IBMのILE RPG資料では、PSDSはプログラムの例外・エラー情報を取得する仕組みとして説明され、21〜28桁に行番号またはステートメント番号の欄が定義されている。本稿は、この欄を通常実行中の現在位置の取得手段として保証するものではない。参照:IBM — Program Status Data Structure。