資源描述:
《錯誤調(diào)試與異常處理》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第十三章錯誤調(diào)試與異常處理本章目標掌握調(diào)試策略掌握錯誤報告的設(shè)置掌握錯誤檢測和錯誤記錄掌握異常處理和異常規(guī)則本章內(nèi)容13.3異常處理13.2PHP錯誤報告13.1調(diào)試策略13.1調(diào)試策略調(diào)試是確定錯誤根本原因并糾正此錯誤的過程編寫程序難免會出現(xiàn)一些錯誤,包括邏輯錯誤和語法錯誤,了解科學(xué)的調(diào)試方法可以節(jié)省大量時間調(diào)試應(yīng)該遵循下面步驟將錯誤狀態(tài)穩(wěn)定下來確定錯誤的來源收集產(chǎn)生錯誤的相關(guān)數(shù)據(jù)分析所以收集的數(shù)據(jù),并構(gòu)造對錯誤假設(shè)確定怎么去證實或證明這個假設(shè),可以對程序進行測試或通過檢查代碼對假設(shè)做出正確結(jié)論備份程序修補錯誤對所修補的代碼進行測試查找是否還有
2、類似錯誤13.1調(diào)試策略(續(xù))調(diào)試手段增加中間變量或跟蹤變量注釋掉部分代碼通過調(diào)試器調(diào)試PHP中有效卻很基本的調(diào)試技術(shù)為打開錯誤報告使用print語句13.2PHP錯誤報告錯誤報告設(shè)置錯誤檢測錯誤記錄13.2.1錯誤報告設(shè)置通過php.ini文件設(shè)置PHP中的許多配置設(shè)置都通過php.ini文件完成,錯誤報告也在php.ini文件中的設(shè)置在調(diào)試PHP應(yīng)用程序時,應(yīng)當(dāng)知道兩個配置變量error_reporting:表示控制輸出到用戶端的消息種類。默認值為E_ALL,表示輸出所有錯誤信息display_errors:表示設(shè)置是否將error_repo
3、rting中設(shè)置的錯誤信息輸出到用戶端,on表示顯示,Off(默認值)表示不顯示13.2.1錯誤報告設(shè)置(續(xù))通過運行時函數(shù)設(shè)置error_reporting()函數(shù)在運行時設(shè)置error_reporting指令interror_reporting([intlevel])ini_set()函數(shù)設(shè)置php.ini文件配置選項的值。該值只在腳本執(zhí)行時生效,腳本結(jié)束后恢復(fù)原值stringini_set(stringvarname,stringnewvalue)ini_get()函數(shù)獲取配置選項的值stringini_get(stringvarname)
4、13.2.2錯誤檢測在創(chuàng)建腳本和Web應(yīng)用程序時,錯誤處理是一個重要的部分在PHP中一些最為重要的錯誤檢測方法簡單的“die()”語句自定義錯誤和錯誤觸發(fā)器錯誤報告13.2.2錯誤檢測(續(xù))使用die()函數(shù)die()函數(shù)是相當(dāng)于應(yīng)用程序的exit()函數(shù),表示終止腳本運行創(chuàng)建自定義錯誤處理器可以創(chuàng)建一個專用函數(shù),在PHP中發(fā)生錯誤時調(diào)用該函數(shù)error_function_name(error_level,error_message,error_file,error_line,error_context)13.2.2錯誤檢測(續(xù))設(shè)置錯誤處理程序
5、(Set_Error_Handler函數(shù))mixedset_error_handler(callbackerror_handler[,interror_types=E_ALL
6、E_STRICT])觸發(fā)錯誤(trigger_error函數(shù))booltrigger_error(stringerror_msg[,interror_type=E_USER_NOTICE])生成一個用戶級的錯誤/警告/通知消息,來觸發(fā)這個用戶錯誤13.2.3錯誤記錄根據(jù)在php.ini中的log_errors和error_log配置,PHP向服務(wù)器的錯誤記錄系統(tǒng)或文件發(fā)送錯
7、誤記錄通過使用error_log()函數(shù),可以向指定的文件或遠程目的地發(fā)送錯誤記錄通過電子郵件向自己發(fā)送錯誤消息,是一種獲得指定錯誤的通知的好辦法13.2.3錯誤記錄(續(xù))設(shè)置開啟錯誤記錄log_errors表示是否開啟錯誤記錄error_log表示錯誤記錄文件存儲的位置和文件名將錯誤信息存入錯誤記錄文件需要使用error_log()函數(shù)boolerror_log(stringmessage[,intmessage_type=0[,stringdestination[,stringextra_headers]]])13.3異常處理什么是異常異常的
8、基本使用創(chuàng)建一個自定義的Exception類多個異常重新拋出異常設(shè)置頂層異常處理器異常的規(guī)則13.3.1什么是異常異常處理用于在指定的錯誤(異常)情況發(fā)生時改變腳本的正常流程當(dāng)異常被觸發(fā)時,通常會發(fā)生當(dāng)前代碼狀態(tài)被保存代碼執(zhí)行被切換到預(yù)定義的異常處理器函數(shù)根據(jù)情況,處理器也許會從保存的代碼狀態(tài)重新開始執(zhí)行代碼,終止腳本執(zhí)行,或從代碼中另外的位置繼續(xù)執(zhí)行腳本不同的錯誤處理方法異常的基本使用創(chuàng)建自定義的異常處理器多個異常重新拋出異常設(shè)置頂層異常處理器13.3.2異常的基本使用當(dāng)異常被拋出時,其后的代碼不會繼續(xù)執(zhí)行,PHP會嘗試查找匹配的“catch”
9、代碼塊如果異常沒有被捕獲,而且又沒用使用set_exception_handler()作相應(yīng)的處理的話,那么將發(fā)生一個嚴重的錯誤(致命錯