仕事で使っているプログラムが、ある日突然、動かなくなった。いや、正確には動く場合もある、なのだ。ボクのデスクトップ端末
放置していたら、今度は別のプログラムも全く同様の症状を見せ始めた。今度は、ボクがメンテしているものなので、いよいよ放置しておくわけにも行かなくなってきた。調べてみると、とあるライブラリの中で落ちている。これは、やはりうちのチームで作っているライブラリなので、メンテしている別の同僚にメールして調査を依頼すると同時に、自分でも少し掘ってみた。
ある端末からは起動できて、別のところではダメ。こういうときには、インストールされているライブラリのバージョンが違ったり、OSのバージョンが違ったりすることが原因だったりするので、チェックしてみるが、これは全く同一で、問題はないことが判明。となると、あとは、シェルの環境変数の違いくらいしかない。調べてみると、あんまり沢山違うので、呆然。とりあえず、PATHを動く方にそろえてみたがダメ。あれこれ、環境変数を変えたり削除したり設定したりして試しているうちに、行き当たった。TZだ oTL
TZは、タイムゾーンを保持する環境変数。これが、クラッシュを起こすシェル上にはなかった。同じ端末でも別にシェルを起こして、TZを設定しておくと、クラッシュしていたものたちも問題なく動く。これを手がかりに、TZに触っているヒトを探してみたら、いた。
くはぁ oTL
これじゃあ、ダメですがな。NULL渡ったら、stringクラス、クラッシュしますがな(/_T)
return std::string(tz ? tz : "");
コメント