海森堡bug

在計算機編程術語中,海森堡bug,又叫heisenbug是一種軟體錯誤,當人們試圖研究它時似乎會消失或改變其行為。 這個術語是Werner Heisenberg的名稱上的一個雙關語,物理學家首先聲稱量子力學的觀察者效應,它指出觀察系統的行為不可避免地改變了它的狀態。 在電子學中,傳統術語是探針效應,將測試探針連線到設備會改變其行為。

類似的術語,例如bohrbug,mandelbug,hindenbug和schrödinbug偶爾會針對其他類型的不尋常的軟體錯誤 jest; 然而,與術語“海森堡”不同,它們並未被廣泛認知或使用。

基本介紹

  • 中文名:海森堡bug
  • 外文名:heisenbug
例子,海森堡 Bug的特性,

例子

出現Heisenbugs是因為調試程式的常見嘗試(例如插入輸出語句或在調試器中運行它)通常會修改代碼,更改變數的記憶體地址及其執行時間。
heisenbug的一個常見示例是當程式使用最佳化編譯器進行編譯時出現的錯誤,但不是在沒有最佳化的情況下編譯同一個程式時出現的錯誤(通常是為了用調試器檢查它)。在調試時,最佳化程式通常保存在暫存器中的值通常被推送到主存儲器。例如,這可能會影響浮點比較的結果,因為記憶體中的值可能比暫存器中的值的範圍和精度要小。同樣,Heisenbugs可能由運行時斷言中使用的測試表達式中的副作用(如C和C ++)導致,其中在使用NDEBUG宏在生產代碼中關閉斷言時不測試測試表達式。
Heisenbugs的其他常見原因是使用非初始化變數的值(可能會在調試過程中更改其地址和/或初始值),或者跟隨一個無效指針(可能指向調試時的不同位置)。調試器通常還提供手錶或其他用戶界面,這些用戶界面會導致額外的原始碼(如屬性訪問器)被隱式執行,從而可能會改變程式的狀態。
時間也可能成為Heisenbugs的一個因素,特別是在多執行緒應用程式中。與正常執行相比,在調試器的控制下執行程式可以改變程式的執行時間。當程式在調試器中單步執行原始碼行時,可能不會發生時間敏感的錯誤,例如競爭條件。當行為涉及與不在調試器控制下的實體進行互動時(例如在兩台機器之間調試網路數據包處理並且只有一個處於調試器控制下時),情況尤其如此。
Heisenbugs可以被視為信息技術中觀察者效應的實例。沮喪的程式設計師可能會幽默地指責月亮階段的黑猩猩,或者(如果它只發生一次)可能會將其解釋為由於阿爾法粒子或宇宙射線影響硬體而產生的軟錯誤。

海森堡 Bug的特性

海森堡 Bug 有這樣一種特性 :當你試 圖跟蹤它時,它會突然消失或改變行為。其實,海森堡 Bug 這個名字的由來含有一定的戲謔成份:它取自德國物理學家海森堡的不確定性原理 (中學課本中可能稱作 “測不準原理”),其描述和解釋的是量子物理 中無法同時準確獲知某一粒子位 置和速度 的現象。與其相關的還有一個現象,被稱為觀察者效應,即觀察某一對象時,無法絕對地做到僅僅觀測而不改變該對象,而 由觀察者效應產生的問題 ,我們就稱之為海森堡 Bug。在遊戲的開發過程中,我們 經常會遇 到海森堡Bug ,在低級代碼中尤其 常見 ,一旦無法正確處理,將給項目帶來災難, 甚至需要花費數天時間去跟蹤一個 Bug。

相關詞條

熱門詞條

聯絡我們