В Visual C ++ 2008 я хочу «поймать» исключение, сгенерированное, как показано здесь:
try {
int foo = 20;
::fgetpos(0, (fpos_t*)&foo);
}
//...
Вот корректировки, которые я сделал, чтобы попытаться успешно поймать:
- SEH активирован (/ eha)
- Я добавил улов (...)
- Я добавил _set_se_translator вектор.
- Я добавил / скорректировал синтаксис SEH: __try / __except (EXCEPTION_EXECUTE_HANDLER)
Короче, я попробовал «все в книге» и до сих пор не могу поймать исключение.Если я заменю вызов на ::fgetpos
на int hey = foo / 0
, то внезапно все вышеперечисленные методы сработают, как и ожидалось.Таким образом, исключение, с которым я имею дело из ::fgetpos
, является каким-то «сверхспециальным».
Может кто-нибудь объяснить, почему эта ошибка :: fgetpos кажется неуловимой и как ее обойти?
update При выполнении в VS IDE окно вывода не называет исключение.Все, что он говорит, это:
Библиотека времени выполнения Microsoft Visual Studio C обнаружила фатальную ошибку в MyProgram.exe.
Не очень полезно.Когда я запускаю консольное приложение из командной строки, я получаю диалог сбоя.Раздел «Сведения о проблеме» диалогового окна содержит эту информацию:
Имя события проблемы: BEX
Смещение исключения: 0002fd30
Код исключения: c0000417
Данные исключения: 00000000
Дополнительная информация 1: 69ad
Дополнительная информация 2: 69addfb19767b2221c8e3e7a5cd2f4ae
Дополнительная информация 3: b1ff
Дополнительная информация 4: b1ffca30cadddc78c19f19b6d150997f