我一直在使用一个旧的 Win32 应用程序,该应用程序使用 OCI(Oracle 调用接口(interface))连接到 Oracle 数据库。应用程序调用 SetUnhandledExceptionFilter()
来捕获(除其他外)访问违规(异常代码 0xC0000005)。
但是,一旦应用程序使用 OCI 函数 orlon()
登录到 Oracle,已安装的异常过滤器就会被 OCI 库覆盖,这意味着过滤器不再捕获异常最初安装的应用程序。这已使用调试器和检查已安装异常过滤器的函数指针值进行了验证。
有人知道为什么 OCI 函数 orlon()
调用 SetUnhandledExceptionFilter()
以及如何禁用此行为吗?
最佳答案
似乎 OCI/Oracle 默认安装信号处理程序 (*nix) 和异常过滤器 (Windows) 来处理段错误 (*nix)、访问冲突 (Windows) 等事件,以便记录诊断。 documentation描述了报告事件的位置以及如何使用 Oracle 实用程序 adrci
检查这些事件。
设置
DIAG_SIGHANDLER_ENABLED=FALSE
在配置文件sqlnet.ora
中禁用OCI信号处理程序/异常过滤器并重新启用标准操作系统故障处理。
关于winapi - Oracle OCI 函数 orlon 调用 SetUnhandledExceptionFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570135/