ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

データが壊れる現象に再び遭遇

同じ対処で処理できるようになりました。
f:id:AJYA:20141003054037j:plain
photo credit: gnizr via photopin cc

200回以上ループするはずが2回目で止まる

部下からループが2回目で止まってしまい原因がわからないと相談がありました。
動作を見ると、確かに2回目で止まってしまっています。
ざっとプログラムを見たところ、以前僕が遭遇した現象のように思えたので、調べてみました。

データが壊れる現象への対処 - ソフトウェア開発者の日常

調査

200回以上ループするはずのループの中で、作成した関数の呼び出しをしないようにすると、200回以上ループしていました。
作成した関数の呼び出しをするようにして、関数内のデータベースへのアクセス以外の処理を行わないようにすると、2回目で止まってしまいました。
以前と同じ現象で、別々のデータベースへの接続なので、照会結果が別領域に確保されると思っていたのが、破壊されていると判断しました。

対処

以前と同じ対処で、200回以上ループするためのデータベースの照会結果を、一旦配列に保持してから処理するようにしたら動作するようになりました。


以前の経験があったので30分ほどで対処はできましたが、経験がないとわけもわからず迷宮入りしてしまいそうです。