1. 程式人生 > >Windows異常處理

Windows異常處理

對異常處理的研究不夠多,這個也源於工作中專案框架一般比較完善的原因,總結一下Windows下C++開發中常用的異常處理方式:

1. 語言自帶異常邏輯 try catch,這個應該是最熟悉的了。C++支援的方式,跨平臺。不足的地方在於只能捕獲語言的異常,就是有有刻意在邏輯中throw出來的。

2. Windows提供的異常,問題就是不能跨平臺,但是功能強大。__try __except, 能夠捕獲Windows下的所有異常,包括軟體異常和硬體異常。

這裡著重說一下Windows提供的異常處理能力,上面說的__try __except就能夠捕獲Windows所有的異常了,但是有個問題就是__try捕獲的範圍,如果要捕獲所有的程式異常,就需要直接在Main這個入口裡面去做,而且每個新的執行緒都需要這個做。這個時候Windows提供的另外一個API就很有用了,SetUnhandledExceptionFilter,從名字就能看出來,UnhandledException未捕獲的異常,就是沒有經過__try __except處理的異常。只需要將這個API在main入口處加入就可以處理所有的異常了。

另外還有一個向量異常,AddVectoredExceptionHandler, 可以在SEH之前捕獲異常,很多BugReport也使用這個方法。沒有使用經驗,不做評論。 異常處理順序:  AddVectoredExceptionHandler -> (__try __catch) -> SetUnhandledExceptionFilter


獲取異常資訊:

GetExceptionCode, GetExceptionInformation