遇到BUG時你應該怎麼做

下面是拜讀Think Python 中關於代碼錯誤的調試方法的一些記錄,特意摘出來以便告誡自己

當你的程序不工作時,

1.首先你需要問自己這些問題:

  • ˆ 有沒有什麼程序應該做卻沒有發生?找到執行該函數的代碼段,確保程序被執行。
  • ˆ 有沒有什麼不應該發生的發生了?找到執行該函數的代碼段,查看它是否執行了?
  • ˆ 有沒有代碼的執行效果與你期望的不同?確保你理解有問題的代碼,閱讀你調用的函數的文檔,用一些簡單的例子進 行測試。

在編程時,你心中需要有一個關於程序如何工作的模型。如果你的程序沒有按照你期望的工作,很可能問題不在於程序,而在於你心中的模型。
修正你心中的模型的最好的方法是將程序分割爲不同部分(通常是函數和方法),並分別測試。一旦你發現了模型和現實的差異,你就可以解決問題。
當然,在開發的過程中尼需要建立並測試組件。如果你遇到了問題,只有一小部分新的代碼是不確定正確性的。


我寫了一個很長的表達式,它沒有按照我期望的工作

編寫複雜的表達式是合理的,如果它們可讀。但是它們調試起來很困難。通常我們將一個
複雜的表達式分割成一系列的臨時變量的賦值。


我的函數或方法沒有按照我期望的返回

如果你的return 語句包含一個複雜的表達式,你沒有機會在返回前打印返回值。同樣你可以使用臨時變量。例如:對於
return self.hands[i].removeMatches()
你可以寫成:
count = self.hands[i].removeMatches()
return count
現在你在返回前可以打印count 的值。


我實在是卡住了,我需要幫助

第一,嘗試離開電腦幾分鐘。電腦輻射會對大腦產生影響,導致下列幾種症狀:

  • ˆ 沮喪和憤怒

  • ˆ 迷信的人認爲“電腦討厭我”,並神奇的相信“程序僅當我向後戴着帽子時才工作正常”。

  • ˆ 隨機漫步編程(用各種可能的方法編程,並選擇工作正常的那個)。

如果你發現你有以上任意一種症狀,站起來走一走。當你心緒平靜時,思考一下程序。它

  • 是做什麼的?什麼肯能造成了這種行爲?上次可以工作的程序是什麼時候?下一步做什麼?

有時找到一個錯誤很費時間。我常常在我離開電腦,讓思維遊蕩的時候找到錯誤。一些找

到錯誤最好的地方有火車上,浴室裏,以及臨睡前。


不,我真的需要幫助

即使最好的程序員也會卡住。有時你在一個程序上工作了太長的時間,因此你難以發現錯
誤。而他人可能一眼就發現問題。
在你向其他人尋求幫助前,你需要做好準備。你的程序需要儘可能簡潔,你需要最少的輸
入來重現錯誤。你需要在合適的位置加入print 語句,同時輸出應可理解。你需要能夠以
簡潔的語言描述問題。
當你想某人求助,你需要提供足夠的信息:

  • ˆ 是否有出錯消息?它是什麼?指向程序的哪部分?

  • ˆ 錯誤出現前你做的最後一步是什麼?你寫的最後幾行是什麼?什麼新的測試導致了錯誤?

  • ˆ 你做了哪些嘗試?你學到了什麼?

當你找到了錯誤,花時間想一想你怎麼能更快的定位它。下一次你遇到類似的問題,你就
可以更快的找到問題。
記住,目標不僅僅是讓程序工作,而是學會如何讓程序工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章