Функция Oracle OCI orlon вызывает SetUnhandledExceptionFilter

Я работал со старым приложением Win32, которое использует OCI (Oracle Call Interface) для подключения к базе данных Oracle. Приложение вызывает SetUnhandledExceptionFilter() для обнаружения (среди прочего) нарушений доступа (код исключения 0xC0000005).

Однако, как только приложение входит в Oracle с помощью функции OCI orlon(), уже установленный фильтр исключений переопределяется библиотекой OCI, что означает, что исключения больше не перехватываются фильтром, установленным первоначально приложением. Это было проверено как с помощью отладчика, так и путем проверки значения указателя функции установленного фильтра исключений.

Кто-нибудь знает, почему функция OCI orlon() вызывает SetUnhandledExceptionFilter() и как отключить это поведение?


person mgd    schedule 09.05.2014    source источник


Ответы (2)


Похоже, что OCI / Oracle по умолчанию устанавливает обработчики сигналов (* nix) и фильтры исключений (Windows) для обработки инцидентов, связанных с ошибками сегментации (* nix), нарушениями доступа (Windows) и т. Д., Для ведения журнала диагностики. В документации описано, где и как сообщается об инцидентах. чтобы изучить их с помощью утилиты Oracle adrci.

Параметр

DIAG_SIGHANDLER_ENABLED=FALSE

в файле конфигурации sqlnet.ora отключает обработчик сигналов OCI / фильтр исключений и повторно включает стандартную обработку ошибок операционной системы.

person mgd    schedule 12.05.2014

Вы также можете предотвратить второй вызов, переопределив «SetUnhandledExceptionFilter». См. Также: PreventSetUnhandledExceptionFilter

Это предотвратит установку второго вызова в систему ...

person Jochen Kalmbach    schedule 12.05.2014
comment
Спасибо за ваш ответ. Однако мне больше нравится идея настроить OCI, чтобы не устанавливать его фильтр исключений, потому что в случае ошибки в библиотеках Oracle у меня все еще есть возможность повторно включить обработку ошибок OCI на сервере клиента, что может дать больше информации о внутреннем состояние библиотеки OCI. - person mgd; 12.05.2014