類型介紹
異常信息是指異常的類型、異常發生的位置及時間等信息。異常信息一般可以分為兩種:定義的異常信息和非定義的異常信息。定義的異常信息是指軟體系統或程式對一些常見的異常已經說明了異常的類型及處理方法;非定義的異常信息是異常是不在系統或程式預期範圍內,這類異常信息一般只說明發生異常的位置,沒有異常處理方法,這一種信息也可以稱作漏洞信息。漏洞即受限制的計算機、組件、應用程式或其他在線上資源無意中留下的不受保護的入口點。網際網路上一些網站有安全防範方面的設計缺陷,這些不受保護的入口點,可能被人非法進入、竊取資料 。
異常處理
介紹
異常處理,英文名為exceptional handling,是代替日漸衰落的error code方法的新法,提供error code 所未能具體的優勢。異常處理分離了接收和處理錯誤代碼。這個功能理清了編程者的思緒,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解。 異常處理(又稱為錯誤處理)功能提供了處理程式運行時出現的任何意外或異常情況的方法。異常處理使用 try、catch 和 finally 關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。異常處理,是程式語言或計算機硬體里的一種機制,用於處理軟體或信息系統中出現的異常狀況(即超出程式正常執行流程的某些特殊條件)。
通過異常處理,我們可以對用戶在程式中的非法輸入進行控制和提示,以防程式崩潰。
從進程的視角,硬體中斷相當於可恢復異常,雖然中斷一般與程式流本身無關。
從子程式編程者的視角,異常是很有用的一種機制,用於通知外界該子程式不能正常執行。如輸入的數據無效(例如除數是0),或所需資源不可用(例如檔案丟失)。如果系統沒有異常機制,則編程者需要用返回值來標示發生了哪些錯誤。
異常安全
一段代碼是異常安全的,如果這段代碼運行時的失敗不會產生有害後果,如記憶體泄露、存儲數據混淆、或無效的輸出。異常安全可分成不同層次:
失敗透明(failure transparency),也稱作不拋出保證(no throw guarantee):代碼的運行保證能成功並滿足所有的約束條件,即使存在異常情況。如果出現了異常,將不會對外進一步拋出該異常。(異常安全的最好的層次)
提交或卷回的語義(commit or rollback semantics),或稱作強異常安全(strong exception safety)或無變化保證(no-change guarantee):運行可以是失敗,但失敗的運行保證不會有負效應,因此所有涉及的數據都保持代碼運行前的初始值。
基本異常安全(basic exception safety):失敗運行的已執行的操作可能引起了副作用,但會保證狀態不變。所有存儲數據保持有效值,即使這些數據與異常發生前的值有所不同。
最小異常安全(minimal exception safety)也稱作無泄漏保證(no-leak guarantee):失敗運行的已執行的操作可能在存儲數據中保存了無效的值,但不會引起崩潰,資源不會泄漏。
異常不安全(no exception safety):沒有保證(最差的異常安全層次)。
監控分析診斷
引言
工業控制領域,很多現場設備都使用基於 WinCE 系統的應用程式來滿足工業環境的控制需求。然而,一旦應用程式特別是設備驅動出現異常,則只能通過串口查看一些信息。對從事系統定製和套用開發的工程技術人員解決所遇到的調試問題很不方便, 根本無法快速分析問題和定位問題, 導致解決問題效率不高。因此有必要提供一種WinCE異常信息監控、 分析和診斷的方法, 記錄WinCE系統運行過程中設備驅動、應用程式的異常信息。當 WinCE 系統或應用程式發生異常時,可以通過查看異常信息和診斷結果來提高解決問題的效率。
總體設計
本設計提出的 WinCE 異常信息監控、分析和診斷方法實際上是由監控模組、診斷模組、本地顯示終端模組、遠程顯示終端模組和遠程客戶端組成。監控模組、診斷模組、本地顯示終端模組和遠程顯示終端模組是本設計的核心模組,每一個模組都代表一個進程,這四個進程都是隨著 WinCE 系統的啟動而自動啟動運行。其中監控模組的作用是跟蹤記錄關於設備驅動和應用程式的異常信息; 診斷模組的作用是根據監控數據進行綜合統計分析, 並生成診斷結果;本地顯示終端模組的作用是在工業設備的本地客戶端顯示異常信息;遠程顯示終端的作用是將所記錄的工業設備異常信息顯示到遠程客戶端上,是對本地顯示終端模組的擴展和延伸。
軟體設計
監控模組的主要職責是記錄 WinCE 系統的設備驅動和各種應用程式的異常信息, 該模組功能包括初始化、固件 ID 校驗、授權認證、設備模組、系統日誌模組、資料庫模組和記錄模組。監控模組是異常信息監控的基礎,也是後續本地顯示終端模組和遠程顯示終端模組所需要的信息顯示的數據來源。監控模組方框圖如圖 1 所示。
初始化的作用是對監控模組的數據結構、執行緒、任務調度機制進行初始化,並分配一塊用於快取系統日誌的記憶體(命名為 LogBuf) ,為監控模組的順利運行建立框架。
固件 ID 校驗的作用是對工業設備本身的合法性進行判定,工業設備上集成了一個用於 ID 校驗的唯讀Flash 晶片,該晶片在集成到工業設備上之前會經專業設備寫入一段 ID 碼。工業設備本身的合法性由其合法的 ID 碼決定,從合法的工業設備的唯讀 Flash 晶片里所讀取的 ID 碼經過校驗才能使固件 ID 校驗返回正確的成功值,否則固件 ID 校驗失敗,說明該工業設備本身的合法性受到質疑,整個監控模組將異常退出。
固件 ID 校驗主要確保硬體體系, 即工業設備本身是合法的, 防止在非法的工業硬體體系上非法使用監控模組。授權認證的作用是對使用 WinCE 系統用戶的合法性進行判定。 監控模組的運行許可權只有特定的用戶才擁有,並不是所有的 WinCE 系統用戶都能隨意運行監控模組。 授權認證主要根據當前運行的 WinCE 系統的用戶和擁有許可權的合法用戶進行比對,如果比對的結果為真值,即當前運行的 WinCE 系統用戶是合法的用戶,那么授權認證返回正確的成功值,否則將表明當前運行的 WinCE 系統用戶不是合法的授權用戶,授權認證失敗, 整個監控模組將異常退出。 授權認證的目的在於保護監控模組在合法的 WinCE 系統用戶下運行,防止該模組在任意非法用戶下濫用。
設備模組的作用是對工業設備的所有硬體外設和應用程式進行探測,獲取相關硬體外設和應用程式的資源配置信息。這些硬體外設包含處理器、USB 設備、網路連線埠、鍵盤滑鼠、WiFi 模組、3G/4G 模組、串口設備、並口設備、存儲介質等。設備模組程式探測這些硬體外設獲得相應的基地址、中斷、驅動參數等信息。運行在 WinCE 系統上的應用程式都是和這些硬體外設相關的,應用程式和硬體外設的驅動程式頻繁交換數據,因此應用程式的運行狀態也能如實反映硬體外設的狀態。故此設備模組也需要獲取應用程式的資源配置信息,如記憶體碎片、程式運行的 CPU 占用率、程式運行的記憶體占用率等。
接著就是資料庫模組,資料庫模組的作用是依據設備模組獲取的硬體外設和應用程式的資源配置信息建立相應的硬體外設資料庫表。所建立的硬體外設資料庫表不僅包含硬體外設的資源配置信息,還包含與該硬體外設相關的應用程式的資源信息。資料庫模組所建立的硬體外設資料庫表與硬體外設是一一對應的,硬體外設的數目與資料庫模組所建立的硬體外設資料庫表是一致的。硬體資料庫表包含處理器表、USB 設備表、網路連線埠表、鍵盤滑鼠表、WiFi 模組表、3G/4G 模組表、串口設備表、並口設備表、存儲介質表等,這些資料庫表中包含硬體外設及其應用程式的資源配置信息 。
系統日誌模組的作用是將系統向串口輸出的調試信息寫入到快取記憶體區 LogBuf,並給每條調試信息添加時間信息,同時通知記錄模組記錄系統日誌數據。最後就是記錄模組,記錄模組的作用是監控各個硬體外設的實時狀態數據,並將異常的信息寫入資料庫中與硬體外設相對應的硬體外設表中。記錄模組所監控的實時狀態數據包含硬體外設的基地址、中斷、驅動參數,及其應用程式的記憶體碎片、程式運行的 CPU 占用率、程式運行的記憶體占用率和系統日誌等,如果上述被監控的數據發生了變化,那么就認為出現了一次異常,並立即將此異常信息寫入相應的硬體外設表中,同時寫入時間戳,供後續的診斷模組分析。
診斷分析模組分為參數設定、規則設定和分析診斷三個部分。參數設定用於設定診斷過程中需要使用的關鍵字,例如 Error、Warning、Failed、Timeout、CPU、COM 等;規則設定用於設定診斷分析過程中使用的規則,如與(&) 、或(||) 、非(!)等;診斷分析根據參數設定、規則設定和資料庫模組中的各個數據表進行綜合統計分析,並生成診斷結果寫入資料庫(也可以是檔案)。