程式除錯的輔助工具
程式寫出來難免有錯,錯誤可以分為語法錯誤或邏輯不是自己的真正意思,前者正式名稱為語法錯誤(Syntax Error),後者正式名稱為邏緝錯誤(Logic Error)。
1.語法錯誤 (Syntax Error):所指的是與程式語法不符,或則含糊不清容易造成人與機械之間認知差距的指令寫法。這類錯誤編譯器(Compiler)及鏈結器(Linker)多半都有辨法自動辨識並通知人來改正。
2.邏輯錯誤 (Logic Error):所指的是可以執行,但結果不對或則不是人所要的。由於機械完全是依據程式來做,當結果與人所要的不同時或則不對是,則應該是程式中有一些指令或指令集團,實際執行的方式與人所認為的方式不一樣所造成。 Logic Error由於錯誤的程式仍是合法可執行的,Compiler與 Linker無法自動判斷錯誤,只有由人直接透過監看程式執行中,記憶體內部資料的變化過程中,找出人所想要的與機械實際進行間產生差距的起源,並修改之,才有辨法除錯。然而實際程式執行中,記憶體的存取完全是由程式所控制,人無法監控它。軟體執行模擬器(Simulator)及除錯器(Debuger)即是為了模擬並監控程式執行中的數值變化以便去除Logic Error而設計的工具軟體。Simulator and Debuger以工具用電腦上的軟體來模擬除錯中的程式在目標(Target)電腦上跑時的情況,包括執行中各記憶體內部值以及值的變化都可以由使用者透過模擬器(Simulator)及除錯器(Debuger) 來控制程式跑或停,監看記憶體,必要時也可以改寫記憶體內的值。 這些功能輔助寫程式人員了解在那一個指令實施之後實際程式執行偏離了原始構想,進而找出有問題的指令或程式邏諿
軟體模擬(Simulation)與硬體模擬(Emulation):
如前面單元所述,Simulator是軟體模擬器,以軟體的方式模擬硬體在實際操作時會產生的一些狀況。利用模擬並且觀察其間的狀況變化,可以找出程式中的邏緝錯誤,以便除錯。
然而軟體模擬器畢境是在只涉及軟體邏輯,有一些硬體電路特性,例如電路短路,或斷路,使輸出入訊號不再是原先軟體所假設的,這就不是軟體Simulator可以模擬出來的,所以Simulator無法協助韌體工程師找出在軟硬配合工作中,硬體電路上所發生的錯誤。
簡易陽春的除錯方式:
不論是Simulator或是Emulator,均是職業級的產品,自然也就會有職業級的價格。 當買不起這種職業級的產品時,就只能使用試用品,或代用品。 由於Simulator軟體只有研發成本,幾乎沒有生產成本,因此Simulator很容易可以找到試用品。但是Emulator本身為硬體電路,其生產成本無法被忽略,所以比較難找到試用品。
沒有試用品可以用代用品,當沒有Simulator及Emulator可用時,工程師為了除錯可採取將關鍵變數寫入檔案作記錄,之後再讀取分析檔案數值的變化記錄研判程式在何時何處出錯。
通常測試韌體時可以使用測試電路板,若測試電路有通訊或存檔管道可以傳送顯示,或則記錄存檔,程式執行過程中,特定重要變數的變化,也可以有效幫助韌體工程師除錯。