opencv1.0中錯誤處理與c語言標準函式庫裡的錯誤處理相似,設定全域性錯誤標識,通過檢查全域性錯誤標識,來判斷程式是否出現錯誤,並進行錯誤報告.
在opencv1.0中,如果呼叫函式出現錯誤並不直接返回錯誤**,而是用cv_error巨集呼叫cverror函式報錯,並設定錯誤狀態,然後呼叫標準的或者使用者自定義的錯誤處理器.
每個程式的執行緒都有乙個全域性變數,它包含了錯誤狀(乙個整數值).這個狀態可以被cvgeterrstatus函式查詢到.
//儲存錯誤所在的檔案和行
typedef struct
cvstackrecord;
//儲存當前執行緒的上下文資訊
typedef struct
cvcontext
cvcontext;
cv_impl
void cverror( int code, const
char* func_name, const
char* err_msg, const
char* file_name, int
line )
if( context->err_mode !=cv_errmodesilent ) }}
}
opencv2.4.1中錯誤處理機制與上述有所不同,雖然對外介面沒有發生變化,但其內部處理方式發生了變化,主要參用c++的異常處理機制.
如果呼叫函式出現錯誤並不直接返回錯誤**,用cv_error巨集呼叫cverror函式,然後在cverror中呼叫error函式來報告錯誤資訊.
在進入error函式之前,新建乙個錯誤異常類,來儲存當前的錯誤資訊,然後利用這個異常類作為error函式的介面.
在error函式內,首先檢測是否存在自定義的錯誤處理器,若存在則進入自定義的錯誤處器處理錯誤,否則,報告錯誤資訊,並丟擲錯誤異常.
若在錯誤處理處,有異常的捕獲,則可以捕獲該異常,使用者進行相應的處理.相應的**如下:
1#define cv_error( code, msg ) \
26 cv_impl void cverror( int code, const
char* func_name, const
char* err_msg, const
char* file_name, int
line )710
void error( const exception&exc )
1126
27if
(breakonerror)
2832
throw exc; //
丟擲異常
33 }
總體而言,opencv中的錯誤處理機制,從c語言的處理方式轉變為c++中的處理方式.
具體的實現,請參考相應的源**.
錯誤處理機制
一直想對公司的錯誤處理機制進行思考和改進,今天查到如下乙個的答覆,很全面,特轉到這裡 錯誤處理機制一般都是自己定義的,在乙個團隊內部自行設定統一的錯誤處理模式。你可以考慮下面三種 1 錯誤發生即處理 也就是錯誤出現在 就在那裡及時處理,而不進行 或者其他操作。2 集中錯誤處理 錯誤發生後統一 到某乙...
錯誤處理機制
2020 11 05 16 55 14 三個屬性 name 錯誤名字 message 錯誤資訊提示 stack 錯誤堆疊 使用 名字 屬性 a.message 下面 syntaxerror物件 語法錯誤 referenceerror物件 引用了不存在變數 rangeerror物件 值超出有效範圍 t...
Spring Boot錯誤處理機制
摘要 1 springboot預設的錯誤處理機制 預設效果 1 瀏覽器,返回乙個預設的錯誤頁面 瀏覽器傳送請求的請求頭 2 如果是其他客戶端,預設響應乙個json資料 原理 可以參照errormvcautoconfiguration 錯誤處理的自動配置 給容器中.預設效果 1 瀏覽器,返回乙個預設的...