小議Windows平台下的異常處理

來源:互聯網
上載者:User

最初發表在QQ空間:Windows平台下的異常處理

對windows平台幾種異常處理的簡單介紹,權當拋磚引玉了。

1. UEF(UnhandledExceptionFilter): 通過SetUnhandledExceptionFilter,不需要在各個代碼處分別處理,可以為整個應用程式安裝統一的例外處理常式,代碼的實現簡單集中。缺點是windows只負責維護一個全域函數指標,後面的SetUnhandledExceptionFilter調用會覆蓋前面的,今天的應用程式有很多都使用了這個函數,有可能導致你的代碼不能被調用。並且它的優先順序最低,如果有VEH或者SEH處理了異常,UEF會什麼都不知道。詳細資料參見 理解UnhandledExceptionFilter

2. SEH,通過這種方式,每個函數都可以安裝自己的異常處理器,優先順序高於UnhandledExceptionFilter,由於SEH是編譯器基於棧楨輔助實現的,象call stack一樣,SEH會層層嵌套,內層函數的SEH會先於外層的SEH被系統調用。這個看上去很美,但遺憾的是,你並不總是想這樣。舉個例子,如果你有多個線程,即使所有的異常處理過程都一樣,你也不得不在每個線程裡寫同樣的代碼來實現SEH。

3. VEH,有點類似1,在進程中提供一個統一的地方處理異常。但優先順序高於SEH。缺點是XP及以後的OS才能使用這個功能。另外,windows使用鏈表記錄所有註冊的VEH,如果你的代碼中使用的第三方代碼也調用了VEH,仍然無法保證你註冊的VEH會被調用。不過這個缺點應該被無視了,因為上述的方法都有類似的問題。既然大家都有同樣的問題,那就是沒有問題了。

異常發生時Windows按3,2,1的順序調用它們。在你的應用裡需要什麼樣的異常處理呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.