gpt4 book ai didi

c++ - Visual Studio 6 何时捕获结构化异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:09 28 4
gpt4 key购买 nike

这主要是出于好奇,但我一直在阅读有关 Visual Studio 在 C++ try-catch 构造中捕获 SEH 异常的历史。我一直在断言启用了/GX 标志的旧版本 Visual Studio 会“有时”在 C++ catch block 中捕获结构化 Win32 异常。

在什么情况下Visual Studio 6.0在使用/GX标志构建时会进入以下代码中的catch block ?

char * p = NULL;

try
{
*p = 'A';
}
catch(...)
{
printf("In catch\n");
}

在我自己使用 Visual Studio 6 + SP6 进行的简单测试中,程序执行因未处理的异常而停止,并且永远不会打印“In catch”。然而,一些文章(比如 this 一篇)让我相信可以进入 catch block 。

最佳答案

int main()
{
__try
{
int *pInt = NULL;
*pInt = 0;// throw some kind of exception
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
DWORD dw = GetExceptionCode();
switch(dw)
{
case EXCEPTION_ACCESS_VIOLATION:
cout << "access violation\n";
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
cout << "int divide by zero\n";
break;
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
cout << "floating point divide by zero\n";
break;
// other cases
}
}
return 0;
}

这也许是我在网上找到的唯一方法。

而且我猜即使你知道为什么处理这样的异常是不好的,仍然对于来到这里的谷歌人来说,请阅读:

http://members.cox.net/doug_web/eh.htm#Q1

关于c++ - Visual Studio 6 何时捕获结构化异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com