norimakihayateの日記

バーチャル旅日記からスタート。現在は私の国内旅行史に特化しています。

徹夜のバグ捜し

f:id:norimakihayate:20150516112821j:plain

 昨日は碓氷峠を下って軽井沢を過ぎ、中軽井沢を越えて信濃追分までやってきた。

 

 プログラム開発をしていると、バグについて触れない訳にはゆかない。今月の3日の記事で最初のバグについて書いた。このバグの経験のおかげで、自作プログラムのリリースにはとても慎重になり、開発中は別として量産以降では私の責任としてのバグは一度も出さずに済んだ。

 

 開発中にバグを探し出すことをデバッグと呼ぶ。その作業の中でも難しいのが幽霊現象を引き起こすバグを見つけ出すことだ。幽霊現象と言うのは説明が難しいが、起きたり起きなかったりするバグと言ったらいいかもしれない。こうすれば必ず起きるというバグは比較的退治しやすい。そこの条件のところで徹底的に調べられるからだ。何時起きるか判らないというバグが一番始末が悪い。起きる現象も程度問題で、殆ど気づかない変化だったり、劇的に状況が変わる場合もあったりで、それが同じ原因に依るなんてこともしょっちゅうあった。起きる頻度もまちまちだ。私が経験したもので一番起き難い頻度のものは数週間で一回しか起きないというものだった。原因が判った後で検証してみたら、確率的にはやはり数週間に一回起きるというのが妥当だったことが判明して幽霊現象とは言えどもコンピュータは正直なのだなと痛感した。

 

 エンジン開発の中で一番よく記憶に残っているのは、私が現役のプログラマを引退して、エンジン開発全体のプロデューサのような仕事をしている時のものだ。私が面倒見ているエンジン機種の開発の中で、プログラマは嘗ての私の部下(愛弟子と言ってもいいかもしれない)が担当していた時のものだ。

 

 エンジンが突然、回転が落ち込むというのだ。酷い時にはエンストにまで至る。これがしかし調べていると滅多に起きない。一日観ていて一度も起きない時もあり、気のせいだったのかなと思って油断していると、ストンと止まっていたりする。

 

 その搭載エンジンの立上り時期がだんだん迫ってきていて、とうとうその嘗ての部下と二人だけで泊り込みの徹夜で原因究明をすることになった。シャシーダイナモと呼ばれている大きなローラーの上に車本体を載せて固定し、エンジンを回しながら制御機器に取り付けたモニター装置から信号を取り出して、ガラス一枚隔てた操作室で計測機器の画面と、傍らにおいた厚さ5cmほどのラインプリンタで打ち出されたプログラムリストの束を交互に見ながら、原因を探るのだ。

 

 計測機器としてはロジックステートアナライザというものを使っていて、制御しているCPUのICの各端子にプローブを付け、ある特定信号パターンが出たら、その前後数十マイクロ秒ぐらいにどんなプログラムが走っていたかを表示させることが出来る機械だ。デジタル版オシロスコープと言ったらいいかもしれない。しかし、相手が幽霊現象の場合はどこでトリガーを掛けて待てばいいか、なかなか判らない。勘と運だけが頼りなのだ。

 

 その時は、もう実験室には他の作業員は皆帰ってしまって、私と嘗ての弟子の二人だけが居残っていた深夜2時過ぎぐらいだったと思う。なかなか現象が出ない中、何気なくプログラムリストを捲って斜め読みしている時に、(あれっ)と気づいたのだ。(ここは、LDAAじゃなくて、LDABじゃないのかな?)

 単純なAとBの打ち間違いだった。二人でプログラムを読み返してみて、やはりその箇所が原因だったことが確かめられた。そこで漸く徹夜作業から解放されたのだった。

 

 今日の画像は社史の挿絵から採ったイメージ画像だ。