程序调试与异常处理课件.ppt
程式調試與異常處理8.1.1程式錯誤及發現時刻語法錯違反語法規範的錯誤稱為語法錯,這類錯誤通常在編譯時發現。語義錯在語義上存在錯誤,稱為語義錯。邏輯錯運行結果卻與期望值不符,這類錯誤稱為邏輯錯。8.1.2發現及處理錯誤發現錯誤【例8.1】發現除數為0錯誤。編譯錯vari:integer;i:=2div0;運行錯vari,j:integer;i:=0;j:=2divi;邏輯錯varx:real;x:=2/0;【例8.2】發現整數類型數據溢出錯誤。編譯錯varj:shortint;month:1..12;j:=127+1;month:=13;運行錯vari,j:shortint;i:=127;j:=i+1;編譯時強制進行範圍檢查{$R+} //編譯指令,打開範圍檢查語句序列;{$R-} //編譯指令,關閉範圍檢查2.處理錯誤【例8.3】數組下標越界問題討論。下標變數聲明為子界類型下標變數聲明為整數類型強制進行範圍檢查正確方法fori:=low(table)tohigh(table)dowrite(table[i]:5);8.2程式調試技術8.2.1執行方式與調試介面8.2.2調試過程8.2.1執行方式與調試介面程式的3種執行方式正常執行,執行Run|Run菜單命令單步執行StepInto,跟蹤進入過程/函數內部。StepOver,將過程/函數調用作為一條語句,一次執行完。分段執行RuntoCursor,運行至游標所在行。設置中斷點執行。RunUntilReturn,執行完過程/函數體餘下的語句序列,返回到調用過程/函數的語句處。2.調試介面進入調試狀態調試介面組成LocalVariables子窗口WatchList子窗口Run菜單8.2.2調試過程選擇需要調試的程式段設置/清除中斷點跟蹤運行程式逐條語句地執行程式分段運行查看變數值的變化情況WatchList窗口中添加變數在WatchList窗口中操縱變數【例8.4】使用調試技術發現程式邏輯錯誤。根源程式及問題使用調試技術試圖發現程式中的邏輯錯改正錯誤後再次運行體會多種單步運行方式的差別在LocalVariables子窗口中查看變數值的動態變化情況在WatchList子窗口中查看變數值的變化情況8.3異常處理機制8.3.1異常處理的概念8.3.2異常回應8.3.3異常保護8.3.1異常處理的概念面向過程語言錯誤處理方式的缺陷面向對象語言異常處理的思想Delphi異常處理機制異常類異常處理語句程式對錯誤與異常的三種處理方式程式不能處理的錯誤程式應避免而不捕獲的異常必須捕獲的異常8.3.2異常回應異常回應語句try語句序列; //存在潛在異常excepton識別字:異常類do語句1; //回應特定異常類on識別字:異常類do語句2;else語句序列; //回應其他異常類end;【例8.5】除數為0錯的異常處理。【例8.6】類型轉換錯的異常處理。8.3.3異常保護異常保護語句try語句序列1; //有潛在異常的語句finally語句序列2;end;需要保護的資源【例8.7】打開檔操作錯誤的異常處理。8.4異常類8.4.1Exception類8.4.2運行時異常8.4.3對象異常類8.4.4組件異常類8.4.1Exception類typeException=class(TObject)privateFMessage:string;FHelpContext:integer;publicconstructorCreate(constMsg:string);……destructorDestroy;override;propertyHelpContext:integerreadFHelpContextwriteFHelpContext;propertyMessage:stringreadFMessag