Windows核心編程學習筆記——-25章

來源:互聯網
上載者:User

第25章 未處理異常、向量化異常與C++異常

本章純粹是為了走過場,深入瞭解看書吧。

一、未處理異常:

1、如何出現:若異常過濾程式返回EXCEPTION_CONTINUE_SEARCH,系統繼續在調用樹的上層尋找異常過濾程式。若每個異常過濾程式都返回EXCEPTION_CONTINUE_SEARCH,就會遇到所謂的未處理異常。

2、解決方案:Windows函數SetUnhandledExceptionFilter給我們處理異常的最後機會,否則Windows就正式認為這個異常沒有得到處理。應在進程初始化階段調用這個函數。

PTOP_LEVEL_EXCEPTION_FILTERSetUnhandledExceptionFilter(

PTOP_LEVEL_EXCEPTION_FILTERpTopLevelExceptionFilter);

異常過濾函數原型必須與下相似:

LONG WINAPITopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo);

         注意:若以NULL為參數調用SetUnhandledExceptionFilter,則將由UnhandledExceptionFilter來處理全域未處理異常(當使用C/C++運行庫時,在進程進入點函數執行前,C/C++運行庫會安裝一個預設的全域異常過濾程式:_CxxUnhandledExceptionFilter,此函數工作原理:首先檢查異常是不是屬於C++異常。若是,則結束時執行abort函數,後者將調用Kernel32.dll中的UnhandledExceptionFilter函數。若否,則返回EXCEPTION_CONTINUE_SEARCH,來讓Windows來處理這個異常。

);若否,則由自動以的函數來處理全域未處理異常。

二、向量化異常

         SHE是一種基於代碼框的機制。Windows提供了向量化異常處理機制。程式可註冊一個函數,而不需要依賴於語言有關的關鍵字。每當異常發生或一個未處理異常脫離標準SHE控制時,此函數就會被調用。

三、C++異常與結構化異常的比較

         SHE是OS提供的便利,可在任何語言中使用。而C++異常處理僅在編寫C++代碼時才可使用。若開發C++程式,就用C++異常。因C++異常是語言的一部分,編譯器知道什麼是一個C++對象,也就意味著編譯器會自動調用產生代碼來調用C++對象的解構函式,保證對象的釋放。

Visual C++編譯器用OS的結構化異常來實現C++異常處理機制。對比如下:

C++

try

catch

throw

SEH

__try

__except

RaiseException

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.