複製鏈接
請複製以下鏈接發送給好友

錯誤處理

鎖定
錯誤是指導致系統不能按照用户意圖工作的一切原因、事件。在程序設計過程中,由於某些錯誤的存在,致使程序無法正常運行,處理這些錯誤以使程序正確運行就稱為錯誤處理。錯誤處理功能是衡量編譯器性能的重要方面,它在幫助程序員儘快修改程序方面起到了非常重要的作用。
中文名
錯誤處理
外文名
error handling
學    科
計算機
程序錯誤類型
語法錯誤、語義錯誤和邏輯錯誤
錯誤處理方法
通過編譯器或人工處理
錯誤處理技術
錯誤改正和錯誤局部化處理

錯誤處理程序錯誤類型

程序錯誤類型主要有語法錯誤、語義錯誤和邏輯錯誤,其中,語法錯誤和語義錯誤能通過編譯器發現,邏輯錯誤只能由編程人員通過比對結果和設計方案發現錯誤並處理。

錯誤處理語法錯誤

圖1常見語法錯誤 圖1常見語法錯誤
語法錯誤是因為源程序中不正確的代碼產生的,即在編寫程序時沒有遵守語法(或詞法)規則,書寫了錯誤的語法代碼,從而導致編譯器無法正確解釋源代碼而產生的錯誤,通常是由於錄入的錯誤引起的,它在詞法分析或語法分析時檢測出來。如“非法字符”、“括號不匹配”、“缺少;”之類的錯誤。圖1為一些常見語法錯誤。

錯誤處理語義錯誤

語義錯誤是指源程序中不符合語義規則的錯誤,即一條語句試圖執行一條不可能執行的操作而產生的錯誤。語義錯誤有的在語義分析時檢測處來,有的在運行時才能檢測出來。如變量聲明錯誤、作用域錯誤、數據存儲區的溢出等錯誤。

錯誤處理邏輯錯誤

邏輯錯誤是指程序的運行結果和程序員的設想有出入時產生的錯誤。這類錯誤並不直接導致程序在編譯期間和運行期間出現錯誤,但是程序未按預期方式執行,產生了不正確的運行結果,較難發現。這種錯誤只能通過分析結果,將結果與設計方案進行對比來發現。 [1] 

錯誤處理錯誤處理規範

錯誤處理按照錯誤類型

按照錯誤類型,通常的處理方式如下:
錯誤類型
範圍
處理方式
操作員錯誤
與人機界面交互時不滿足輸入規則、輸入範圍等發生的錯誤

運行時錯誤
與外部資源交互時發生的錯誤,如網絡、文件系統、數據庫、其它業務應用系統等

程序員錯誤
與客户模塊交互時不滿足前置條件後置條件發生的錯誤,如類庫被其他程序員調用時參數超出範圍等

錯誤處理按照調用類型

按照調用類型,通常的處理方式如下:
調用類型
處理方式
同步調用

異步調用

錯誤處理按照展現方式

按照展現方式,通常的分類如下: [2] 
展現方式
涉及模塊
界面提示

記錄日誌

錯誤處理錯誤處理技術

編譯器檢查出源程序中的錯誤後,首先要向用户報告錯誤信息,以便可以進一步改正錯誤。另外還要對錯誤進行適當的處理,以便分析過程可以繼續下去,對錯誤的處理主要有兩種方法:錯誤改正和錯誤局部化處理。 [3] 

錯誤處理語法錯誤處理

詞法分析中的錯誤局部化處理比較簡單,而編譯過程中大部分查錯和改錯工作集中在語法分析階段,下文為自上而下語法分析中的錯誤局部化處理策略。

錯誤處理處理措施

在語法分析過程的每一時刻,總可以把源程序輸入符號串
劃分為如下形式(式1):
其中,
是已經掃描和加工過的部分,
為現行輸入符號,
是輸入串的餘留部分。假定編譯程序發現了源程序中的一個語法錯誤,這對自上而下分析來説,就意味着分析器已為輸入串建立了一棵部分語法樹,並且此部分語法樹已經覆蓋了子串
,但卻無法再擴大而覆蓋
。此時,就必須確定如何修改源程序來“更正”這個錯誤。可供採用的修改措施如下:
(1) 刪去符號
再進行分析;
(2) 在
之間插入一終結符號串α,即把式(1)修改為(式2):
,然後再從
的首部開始分析;
(3) 在
之間插入終結符號串α(見式(2)),但從
開始分析;
(4) 從
的尾部刪去若干個符號。
以上各種修改措施既可單獨使用,也可聯合使用。但(3)、(4)兩種措施需對源程序已加工部分進行修改,從而可能更改相應語義信息,因此實現起來比較困難而較少採用。

錯誤處理處理算法

假定在語法分析過程中,當掃描到輸入符號
時發現了一個語法錯誤(見式(1)),且已構造的部分語法樹不能進行擴展,則可執行下面的算法對該語法錯誤進行校正:
(1) 建立一個符號表L,它由所有未完成分支的各個未完成部分中的符號組成。
(2) 對於從出錯點開始的餘留輸入串
,刪去
並考察
,看L中是否存在這樣的一個符號U且滿足
U ai+1…。如果這樣的U不存在,則再刪去
並繼續考察
,直到找到某個
滿足
為止。
(3) 根據(2)所得到的U確定它所在的那個未完成分支。
(4) 確定一個符號串α,使得若把α插入到
之前便能使分析繼續下去。為了確定這樣的α,只需要考察(3)所找到的那個未完成分支以及其各子樹的未完成分支,並對它們都確定一個終結符號串以補齊相應的分支,最後再把這些終結符號串依次排列在一起就得到了所需的α。
(5) 把α插到
之前並從α的首部開始繼續分析過程。 [3] 

錯誤處理語義錯誤處理

遏止錯誤株連信息
錯誤株連,是指當源程序出現一個錯誤時,此錯誤將導致發生其它錯誤,而後者可能並不是一個真正的錯誤。例如,當編譯程序處理一個形如A[
]的下標變量時,,假定由查符號表得知A不是一個數組名,這就出現了一個錯誤;而其後核對此下標變量的下標個數是否與相應數組的維數一致時,由於A不是數組名而查不到內情向量,從而只能認為兩者不一致,於是又株連產生了第二個錯誤。
為了遏止這種株連信息,一種簡單的辦法是在源程序中用一個“正確”的標識符去替換出錯的標識符,同時把新標識符登入符號表中並儘可能填入各種屬性。在此,這種符號表登記項是為改正錯誤而臨時插入的,故對它們加以特殊標誌。這樣就可按下述方法實現遏止株連信息:每當發現一個引起錯誤的標識符時,就以該標識符的符號表登記項指針作為參數去調用輸出出錯信息子程序,這個子程序將查看相應的登記項,如果它已加以標誌,則不再輸出出錯信息。
遏止重複出錯信息
在源程序中,如果某一標識符未加説明或者説明不正確,則會導致程序中對該標識符的錯誤使用。例如下面的程序:
由於未在函數f中對整型變量c加以説明,因而賦值句中對c的每次引用都將輸出“變量的類型不相容”錯誤信息。當在源程序中發現使用了一個未經説明的標識符時,就將它登入符號表中,並根據上下文填寫所查出的一些屬性;再建立另一張表,其中各個登記項有相應標識符的各種錯誤用法,在遇到一個錯用的標識符時就順序檢查這張表。如果以前曾按同樣方式使用過該標識符,就不再輸出出錯信息;否則,除輸出出錯信息外,還要將本次錯用的情況登入該表。 [3] 
參考資料
  • 1.    萬鋼,初愛萍. VB程序的調試與錯誤處理[J]. 電腦知識與技術,2006,(32):144+193.
  • 2.    錯誤處理規範  .希賽網 .1970-01-01[引用日期2017-05-16]
  • 3.    李娟,王冬星. 錯誤處理技術的研究[J]. 大慶師範學院學報,2008,(02):17-19.