29/8/11

Quote

ハイゼンバグ (Heisenbugs)

ハイゼンバグは、それを調査しようとすると変貌したり消えたりするバグである。

よくある例としては、リリース版では発生するがデバッグ環境では再現できないものや、競合状態によって発生するものがある。この名前は不確定性原理を提唱したハイゼンベルクのもじり。ここでの不確定性原理とは量子力学用語で「観測すること自体が対象に影響を与えるため正確な観測ができないこと」を指す(これは実際には観察者効果であり不確定性原理ではないが、両者はよく混同される)。

デバッグモードではプログラムの実行前にメモリがクリーンアップされたり、変数がレジスタではなく特定のスタック位置へ配置されたりすることがある。これはハイゼンバグのよくある原因である。またデバッガは、変数の監視等のために、普段実行されないコード(変数アクセサなど)を実行する場合があり、これによってプログラムの状態が変わることも原因となる。他にも、Fandango on core が原因になることもある。その裏には初期化されていない変数が隠れていることが多い。

この言葉が初めて使われたときに同席したという Bruce Lindsay は、これはハイゼンベルクの「ある物事をよく見れば見るほど、他の物事をよく見ることができなくなる」という言葉に由来するとインタビューで述べている。

« Previous Post Next Post »