美文网首页
VS2008中try...catch无法捕捉异常

VS2008中try...catch无法捕捉异常

作者: 祁晏晏 | 来源:发表于2019-01-09 15:41 被阅读0次

现象描述:
在VS2008中,使用了try...catch,但没有抛出异常而是直接报错。

代码如下:

FreeLibrary(hModule);
try
{
    cout<<g_getA(25, 15)<<endl;//g_getA是动态链接库hModule中的方法
}catch(...)
{
    cout<<"use dll error"<<endl;//应该打印输出
}

应该打印输出的地方直接报错中断。

try...catch异常的原因总结如下:

[1]. 编译器问题
VC编译器会将try...catch模块给优化,导致其不能正常运行
项目->属性->配置属性->c/c++->命令行->附加选项,添加 /EHa

我的问题通过该方法就能解决

[2].异常机制问题

  1. try catch throw被称为C++异常,而__try __except __finally被称为C异常也叫SEH异常机制,windows内嵌的就是SEH异常机制, 当windows的编译器编译c++的异常如try,catch的时候最终使用的仍然是SEH异常机制
  2. SEH异常机制支持硬件异常和软件异常,而C++异常机制不支持硬件异常,而
    EXCEPTION_ACCESS_VIOLATION
    EXCEPTION_BREAKPOINT
    EXCEPTION_FLT_DIVIDE_BY_ZERO
    等等都属于硬件异常,所以C++异常机制是捕获不到的
  3. 如果你确实想用c++异常机制破获硬件异常,必须在所有的硬件异常发生之前调用_set_se_translator这个函数,传入一个能够将所有硬件异常转换为C++异常机制的函数地址就可以了

常见的除0异常不是C++异常。不是所有的异常都能捕获。

参考:


  1. https://blog.csdn.net/xiaokuang5020/article/details/72886628

  2. https://bbs.csdn.net/topics/330040728中beginnow的回答

相关文章

网友评论

      本文标题:VS2008中try...catch无法捕捉异常

      本文链接:https://www.haomeiwen.com/subject/cotgrqtx.html