除錯是執行一次成功的測試後所要進行的工作。除錯包括兩個步驟:第一步,確定程式中可疑錯誤的準確性質和位置。第二部,修改錯誤。
一、暴力法除錯
特點:不需要過多思考,耗費腦力較少,效率低下
利用記憶體資訊輸出來除錯
在程式中插入列印語句除錯
使用自動化的除錯工具進行除錯(設定斷點等)
這些問題如果應用在大型程式中,除錯效率會非常低下,一般只作為備用方法。
二、歸納法除錯
歸納法是線索(即錯誤症狀或測試用例的結果)出發,尋找線索之間的聯絡。
使用歸納法除錯的過程如下:
做出假設:利用線索結構裡可能的模式做出乙個或者多個關於錯誤原因的假設。如果有多個假設存在,首先選擇最有可能的乙個。
證明假設:如果忽略這一步,接下來可能只能修正症狀,而不能解決問題本身。所以應該將假設和最初的資料或線索進行比較,來證明假設的合理性,以確定這些假設完全可以解釋這些線索的存在。如果無法解釋,這些假設要麼是不完整或無效的,要麼還有更多錯誤的存在。解決問題:解決問題後仍然需要做回歸測試以確保問題和錯誤修復沒有引入其他錯誤。
三、演繹法除錯
演繹的過程是從一些普遍的理論或者前提觸發,使用排除和精煉的過程,達到乙個結論。過程如下:
列舉所有可能的原因或假設:第一步是建立乙份所有想象得到的錯誤線索的清單,線索不需要有完整的假設,可以純粹是一些猜測。
利用資料排除可能的原因:詳細檢查所有的資料,盡量排除所有可能的原因。如果排除後,剩下的原因多餘一條,選擇最有可能的一條。
提煉剩下的假設:利用現有的線索提煉這個推測,即細節化、具體化。
證明剩下的假設:此步驟與歸納法中的第四步一樣。
修復問題:此步驟與歸納法中的第五步一樣。
四、回溯法除錯
在小型程式中定位錯誤的一種有效方法是沿著程式的邏輯結構回溯不正確的結果,直至找到程式邏輯出錯的位置。即從程式產生不正確結果的地方開始,逆向執行程式,重複使用「如果程式在此處的狀態是這個樣子的,那麼在上面位置的狀態就必然是那樣的」的過程,很快就能定位出錯誤。
五、測試法除錯
當發現了某個被懷疑的錯誤的症狀之後,我們需要編寫與原先有所變化的測試用例,盡量確定錯誤的位置。實際上,這個方法經常和歸納法或演繹法一起使用。
總結:所有的測試方法都有乙個共同的方法,就是「思考」!修改錯誤時,要注意應該糾正錯誤本身,而不是其症狀,並且應該意識到,改正錯誤會可能引入新錯誤。抱著嚴謹的態度去思考,才能向著精確和高效的道路上邁進。
第八章(筆記)
能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
c primer Plus第八章筆記
該書應從8章之後開始學習 現在開始第8章 p199 字元輸入輸出 緩衝區 是乙個存放內容的臨時儲存區域 為什麼要設定緩衝區 一 將若干個字元作為乙個塊進行傳輸比逐個傳送這些字元耗時少。二 如果輸入了乙個錯的字元,可以用鍵盤的更正功能進行修改。當按下回車鍵的時候就傳送輸入的字元。但是,互動性的程式需要...