2011-02-19 202 views
0

首先,C++中是否存在不可捕捉的異常?不可捕捉的異常?

我見過一個2005年微軟kb article,討論在一個DLL引發的異常,不能在另一個DLL被抓住。看起來這是用多年前的一個修補程序解決的,但我現在可能會遇到這個問題 - 使用Visual C++ 2008.

具體而言,基於崩潰後的小型轉儲文件報告,在調用:: fgetpos I期間「M看到的是:

kernel32!UnhandledExceptionFilter+0x55b

兩件事情在我的頭上彈出。首先我注意到指定的catch塊,位於與調用DLL分離的DLL中,沒有捕獲異常!這是知識產權文章描述的重複嗎?其次,我懷疑kernel32「未處理的異常」是否是Visual C++ catch塊無法捕捉的。我認爲使用「全能」elipses就足夠了。

有什麼我失蹤了嗎?

+0

拋出的異常是什麼?你還使用C++或SEH異常處理程序嗎?如果沒有異常處理程序處理異常,則UnhandledExceptionFilter進程會處理異常,但異常可能已由代碼處理。 – Avilo 2011-02-19 03:16:04

回答

4

您需要區分C++異常和SEH例外。內核對C++異常一無所知,並且C++ catch()對SEH一無所知(除非啓用了擴展catch處理)。 SEH異常捕獲block_try和_finally。這些是非常不同的,而且不應該混淆。