您的位置 > 南粤36选7开奖结果今天 > 軟件開發知識
軟件開發知識
你調試過的最難的Bug是什么?

南粤36选7开奖结果今天 www.sxcvy.icu   這個bug的癥狀是,當你需要保存你的進度時,代碼會訪問存儲卡,而大部分情況下沒有什么問題…但是偶爾讀寫會超時…沒有任何明顯的原因。一個短小的寫入經?;俚舸媧⒖?。玩家要保存進度,我們不僅不保存,還擦除他們存儲卡上的全部東西。天哪。
  過了一段時間,我們在Sony的制作人Connie Booth慌了。我們顯然不能帶著這個bug發布游戲,而六個星期之后我對于問題出在哪一點線索都沒有。通過Connie我們向其他 PS1 開發者求助:有沒有人出現過像我們這樣的情況?沒有。絕對沒有任何人在存儲卡系統上出現任何問題。
  在你絞盡腦汁之后,你能做的唯一一個調試方法就是分而治之:一點點去除程序中的代碼,直到留下的代碼很少但你仍然出問題。像木雕一樣去除沒有問題的代碼,留下的就是你的bug所在。
  在這樣的背景下挑戰在于,視頻游戲是很難去除某一部分的。在你刪除模擬重力或者顯示字符的代碼后,如何運行游戲?
  你必須做的是用一個假裝做真正的事情,但實際上只是做很簡單的不會出現bug事情的東西來替換掉整個???。你必須寫新的支撐代碼來讓這些玩意正常工作。這是一個緩慢而痛苦的過程。
  長話短說:我做完了。我移除了大片大片的代碼,相當多,只留下了初始化代碼——就是準備游戲運行系統,初始化底層硬件等等。當然,我不能顯示加載/保存菜單,因為我截除了所有的圖像代碼。但是我能夠假裝用戶使用(不可見的)加載/保存屏幕并且請求保存,然后寫入卡中。
  我最終以一個帶有這個bug的很少量的代碼結束——但問題仍然隨機出現!在大多數情況下沒啥問題,但是偶爾會失效?;舊纖械腃rash的實際代碼都被移除了,但還是這樣。這實在是莫名其妙:留下來的代碼基本上都沒做什么事。
    時鐘讓不直接連接到CPU的硬件設備和cpu運行的代碼同步。時鐘決定了波特率——數據從一頭傳到另一頭的速率。如果計時有什么問題,硬件或者軟件或者兩者都會亂七八糟的。這真的,真的很糟糕,并且通常導致數據損壞。
   我重新回到測試程序上,試著檢測當計時器設置為時出現的那些錯誤的模式。終于,我注意到這些錯誤出現在使用PS1手柄的人身上。因為我自己很少這樣做,所以我沒有注意到(為啥我要在測試加載/保存代碼的時候用手柄)。但是有一天我們的美工等我去完成測試(我確定那時候我在爆粗口),而他緊張的擺弄著手柄??ㄋ鴰盜??!暗認?,怎么回事?喂,再來一次!”
  一旦我發現了這兩件事是聯系著的,就很容易重現bug:開始寫入存儲卡,動一下手柄,存儲卡損壞。在我看來完全是硬件bug。
  我去找Connie告訴他我的發現。她轉述給設計過PS1的硬件工程師。她被告知:“不可能,這不可能是硬件問題?!蔽腋滴室幌攣夷懿荒苤苯雍退?。
  那個工程師給我打電話了,他用著他的爛英語,我用著我更爛的日語,我們爭論一會。我最后說:“我給你一個30行的測試程序,讓你在動手柄的時候能夠出現這問題?!彼鷯α?。他向我保證,這是浪費時間,而他正在一個新項目上很忙,但因為我們是Sony很重要的開發者,他會試的。
  第二天晚上(我們在洛杉磯,而他在東京,所以對于我來說是晚上而他是到了第二天),他給我打電話,不好意思的向我道歉。這是個硬件問題。
  我還是沒有完全搞清楚問題到底在哪,但是我的印象中,從Sony總部的反饋聽到的是,如果將可編程計時器設置到足夠高的時鐘頻率,會影響到主板上時鐘晶振附近的一些東西。這些東西之一就是存儲卡的波特率控制器,同時也設置手柄的波特率。我不是搞硬件的,所以對于細節我相當模糊。
  但是主旨是主板上兩個獨立部分的串擾,以及手柄接口和存儲卡接口數據發送的結合在1kHz的時鐘頻率下會導致丟位,從而數據丟失,以致卡損壞。
  這是我全部編程生涯中,唯一一次因為量子力學debug的問題。

咨詢中心:
在線客服咨詢反饋