版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-海森堡bug

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶(hù)提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

在計(jì)算機(jī)編程術(shù)語(yǔ)中,海森堡bug,又叫heisenbug是一種軟件錯(cuò)誤,當(dāng)人們?cè)噲D研究它時(shí)似乎會(huì)消失或改變其行為。 這個(gè)術(shù)語(yǔ)是Werner Heisenberg的名稱(chēng)上的一個(gè)雙關(guān)語(yǔ),物理學(xué)家首先聲稱(chēng)量子力學(xué)的觀察者效應(yīng),它指出觀察系統(tǒng)的行為不可避免地改變了它的狀態(tài)。 在電子學(xué)中,傳統(tǒng)術(shù)語(yǔ)是探針效應(yīng),將測(cè)試探針連接到設(shè)備會(huì)改變其行為。

類(lèi)似的術(shù)語(yǔ),例如bohrbug,mandelbug,hindenbug和schr?dinbug偶爾會(huì)針對(duì)其他類(lèi)型的不尋常的軟件錯(cuò)誤 jest; 然而,與術(shù)語(yǔ)“海森堡”不同,它們并未被廣泛認(rèn)知或使用。

例子出現(xiàn)Heisenbugs是因?yàn)檎{(diào)試程序的常見(jiàn)嘗試(例如插入輸出語(yǔ)句或在調(diào)試器中運(yùn)行它)通常會(huì)修改代碼,更改變量的內(nèi)存地址及其執(zhí)行時(shí)間。

heisenbug的一個(gè)常見(jiàn)示例是當(dāng)程序使用優(yōu)化編譯器進(jìn)行編譯時(shí)出現(xiàn)的錯(cuò)誤,但不是在沒(méi)有優(yōu)化的情況下編譯同一個(gè)程序時(shí)出現(xiàn)的錯(cuò)誤(通常是為了用調(diào)試器檢查它)。在調(diào)試時(shí),優(yōu)化程序通常保存在寄存器中的值通常被推送到主存儲(chǔ)器。例如,這可能會(huì)影響浮點(diǎn)比較的結(jié)果,因?yàn)閮?nèi)存中的值可能比寄存器中的值的范圍和精度要小。同樣,Heisenbugs可能由運(yùn)行時(shí)斷言中使用的測(cè)試表達(dá)式中的副作用(如C和C ++)導(dǎo)致,其中在使用NDEBUG宏在生產(chǎn)代碼中關(guān)閉斷言時(shí)不測(cè)試測(cè)試表達(dá)式。

Heisenbugs的其他常見(jiàn)原因是使用非初始化變量的值(可能會(huì)在調(diào)試過(guò)程中更改其地址和/或初始值),或者跟隨一個(gè)無(wú)效指針(可能指向調(diào)試時(shí)的不同位置)。調(diào)試器通常還提供手表或其他用戶(hù)界面,這些用戶(hù)界面會(huì)導(dǎo)致額外的源代碼(如屬性訪問(wèn)器)被隱式執(zhí)行,從而可能會(huì)改變程序的狀態(tài)。

時(shí)間也可能成為Heisenbugs的一個(gè)因素,特別是在多線程應(yīng)用程序中。與正常執(zhí)行相比,在調(diào)試器的控制下執(zhí)行程序可以改變程序的執(zhí)行時(shí)間。當(dāng)程序在調(diào)試器中單步執(zhí)行源代碼行時(shí),可能不會(huì)發(fā)生時(shí)間敏感的錯(cuò)誤,例如競(jìng)爭(zhēng)條件。當(dāng)行為涉及與不在調(diào)試器控制下的實(shí)體進(jìn)行交互時(shí)(例如在兩臺(tái)機(jī)器之間調(diào)試網(wǎng)絡(luò)數(shù)據(jù)包處理并且只有一個(gè)處于調(diào)試器控制下時(shí)),情況尤其如此。

Heisenbugs可以被視為信息技術(shù)中觀察者效應(yīng)的實(shí)例。沮喪的程序員可能會(huì)幽默地指責(zé)月亮階段的黑猩猩,或者(如果它只發(fā)生一次)可能會(huì)將其解釋為由于阿爾法粒子或宇宙射線影響硬件而產(chǎn)生的軟錯(cuò)誤。

海森堡 Bug的特性海森堡 Bug 有這樣一種特性 :當(dāng)你試 圖跟蹤它時(shí),它會(huì)突然消失或改變行為。其實(shí),海森堡 Bug 這個(gè)名字的由來(lái)含有一定的戲謔成份:它取自德國(guó)物理學(xué)家海森堡的不確定性原理 (中學(xué)課本中可能稱(chēng)作 “測(cè)不準(zhǔn)原理”),其描述和解釋的是量子物理 中無(wú)法同時(shí)準(zhǔn)確獲知某一粒子位 置和速度 的現(xiàn)象。與其相關(guān)的還有一個(gè)現(xiàn)象,被稱(chēng)為觀察者效應(yīng),即觀察某一對(duì)象時(shí),無(wú)法絕對(duì)地做到僅僅觀測(cè)而不改變?cè)搶?duì)象,而 由觀察者效應(yīng)產(chǎn)生的問(wèn)題 ,我們就稱(chēng)之為海森堡 Bug。在游戲的開(kāi)發(fā)過(guò)程中,我們 經(jīng)常會(huì)遇 到海森堡Bug ,在低級(jí)代碼中尤其 常見(jiàn) ,一旦無(wú)法正確處理1,將給項(xiàng)目帶來(lái)災(zāi)難, 甚至需要花費(fèi)數(shù)天時(shí)間去跟蹤一個(gè) Bug。

本詞條內(nèi)容貢獻(xiàn)者為:

李嘉騫 - 博士 - 同濟(jì)大學(xué)