程式調試

程式調試

程式調試是將編制的程式投入實際運行前,用手工或編譯程式等方法進行測試,修正語法錯誤和邏輯錯誤的過程。這是保證計算機信息系統正確性的必不可少的步驟。編完電腦程式,必須送入計算機中測試。根據測試時所發現的錯誤,進一步診斷,找出原因和具體的位置進行修正。

基本介紹

  • 中文名:程式調試
  • 特點:用手工或編譯程式等方法進行測試
  • 原則:避開死胡同
  • 目的:保證計算機信息系統正確性
步驟,原則,方法,分類,靜態調試,動態調試,

步驟

第一步,用編輯程式把編制的源程式按照一定的書寫格式送到計算機中,編輯程式會根據使用人員的意圖對源程式進行增、刪或修改。
第二步,把送入的源程式翻譯成機器語言,即用編譯程式對源程式進行語法檢查並將符合語法規則的源程式語句翻譯成計算機能識別的“語言”。如果經編譯程式檢查,發現有語法錯誤,那就必須用編輯程式來修改源程式中的語法錯誤,然後再編譯,直至沒有語法錯誤為止。
第三步,使用計算機中的連線程式,把翻譯好的計算機語言程式連線起來,並扶植成一個計算機能真正運行的程式。在連線過程中,一般不會出現連線錯誤,如果出現了連線錯誤,說明源程式中存在子程式的調用混亂或參數傳遞錯誤等問題。這時又要用編輯程式對源程式進行修改,再進行編譯和連線,如此反覆進行,直至沒有連線錯誤為止。
第四步,將修改後的程式進行試算,這時可以假設幾個模擬數據去試運行,並把輸出結果與手工處理的正確結果相比較。如有差異,就表明計算機的程式存在有邏輯錯誤。如果程式不大,可以用人工方法去模擬計算機對源程式的這幾個數據進行修改處理;如果程式比較大,人工模擬顯然行不通,這時只能將計算機設定成單步執行的方式,一步步跟蹤程式的運行。一旦找到問題所在,仍然要用編輯程式來修改源程式,接著仍要編譯、連線和執行,直至無邏輯錯誤為止。也可以在完成後再進行編譯。

原則

一,用頭腦去分析思考與錯誤徵兆有關的信息。
二,避開死胡同。
三,只把調試工具當做手段。利用調試工具,可以幫助思考,但不能代替思考,因為調試工具給的是一種無規律的調試方法。
四,避免用試探法,最多只能把它當做最後手段。
五,在出現錯誤的地方,可能還有別的錯誤。
六,修改錯誤的一個常見失誤是只修改了這個錯誤的徵兆或這個錯誤的表現,而沒有修改錯誤本身。如果提出的修改不能解釋與這個錯誤有關的全部線索,那就表明只修改了錯誤的一部分。
七,注意修正一個錯誤的同時可能會引入新的錯誤。
八,修改錯誤的過程將迫使人們暫時回到程式設計階段。修改錯誤也是程式設計的一種形式。
九,修改原始碼程式,不要改變目標代碼。

方法

一,簡單調試方法:步驟
1,在程式中插入列印語句、優點是能夠顯示程式的動態過程,比較容易檢查源程式的有關信息。缺點是效率低,可能輸入大量無關的數據,發現錯誤帶有偶然性。
2,運行部分程式。有時為了測試某些被懷疑有錯的程式段,卻將整個程式反覆執行許多次,在這種情況下,應設法使被測程式只執行需要檢查的程式段,以提高效率。
3,藉助調試工具。目前大多數程式設計語言都有專門的調試工具,可以用這些工具來分析程式的動態行為。
二,回溯法排錯。確定最先發現錯誤症狀的地方,人工沿程式的控制流往回追蹤源程式代碼,直到找到錯誤或範圍。
三,歸納法排錯。是一種系統化的思考方法,是從個別推斷全體的方法,這種方法從線索(錯誤徵兆出發),通過分析這些線索之間的關係找出故障。主要有4步:
(1)收集有關數據。收集測試用例,弄清測試用例觀察到哪些錯誤徵兆,以及在什麼情況下出現錯誤等信息。
(2)組織數據。整理分析數據,以便發現規律,即什麼條件下出現錯誤,什麼條件下不出現錯誤。
(3)導出假設。分析研究線索之間的關係,力求找出它們的規律,從而提出關於錯誤的一個或多個假設,如果無法做出假設,則應設計並執行更多的測試用例,以便獲得更多的數據。
(4)證明假設。假設不等於事實,證明假設的合理性是極其重要的,不經證明就根據假設排除錯誤,往往只能消除錯誤的徵兆或只能改正部分錯誤。證明假設的方法是用它解釋所有原始的測試結果,如果能圓滿地解釋一切現象,則假設得到證明,否則要么是假設不成立或不完備,要么是有多個錯誤同時存在。
四,演繹法排錯。構想可能的原因,用已有的數據排除不正確的假設,精化並證明餘下的假設。
五、對分查找法。如果知道每個變數子啊程式內若干個關鍵點上的正確值,則可用賦值語句或輸入語句在程式中的關鍵點附近“注入”這些變數的正確值,然後檢查程式的輸出。如果輸出結果是正確的,則表示錯誤發生在前半部分,否則,不妨認為錯誤在後半部分。這樣反覆進行多次,逐漸逼近錯誤位置。

分類

靜態調試

可以採用如下兩種方法:
(1)輸出暫存器的內容。在測試中出現問題,設法保留現場信息。把所有暫存器和主存中有關部分的內容列印出來(通常以八進制或十六進制的形式列印),進行分析研究。用這種方法調試,輸出的是程式的靜止狀態(程式在某一時刻的狀態),效率非常低,不得已時才採用。
(2)為取得關鍵變數的動態值,在程式中插入列印語句。這是取得動態信息的簡單方法,並可檢驗在某時間後某個變數是否按預期要求發生了變化。此方法的缺點是可能輸出大量需要分析的信息,必須修改源程式才能插入列印語句,這可能改變關鍵的時序關係,引入新的錯誤。

動態調試

通常利用程式語言提供的調試功能或專門的調試工具來分析程式的動態行為。一般程式語言和工具提供的調試功能有檢查主存和暫存器;設定斷點,即當執行到特定語句或改變特定變數的值時,程式停止執行,以便分析程式此時的狀態。

相關詞條

熱門詞條

聯絡我們