catch(...) 实际上捕获所有异常吗?
Posted
技术标签:
【中文标题】catch(...) 实际上捕获所有异常吗?【英文标题】:Does catch(...) actually catch all exceptions? 【发布时间】:2011-11-21 06:07:05 【问题描述】:我看到 catch (...) 没有捕获所有异常,并且最终用户会抛出一个恼人的弹出窗口。
size_t pos;
char *ptrDir="c:\\test";
std::string strDir =
strDir.erase(strlen(ptrDir) - 1);
pos = strDir.find("Test");
try
std::string strPat = strDir.substr(pos);
catch(...)
std::cout<<"I am hiding Exception";
我使用的是 Visual Studio 2005,Windows XP。
注意:代码是有意生成异常的。这是一个测试代码
【问题讨论】:
您一定是在谈论诸如访问冲突之类的异常,它们不是标准 C++ 异常——它们是结构化异常处理的一部分:gamedev.net/page/resources/_/technical/general-programming/… 也许这与SEH exceptions有关?可能你也需要抓住它们。 注意:结构化异常不是 C++ 异常(因此不是语言的一部分)。它们是操作系统的一部分,而不是语言的一部分,尽管 DevStudio 提供了额外的语言扩展来捕获和操作它们。 【参考方案1】:您的代码可能会产生访问冲突,这在 VC++ 中不会是标准异常,它们属于结构化异常的领域,您也可以捕获这些异常,但需要使用不同的机制:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657(v=vs.85).aspx
Structured Exception Handling
【讨论】:
以上是关于catch(...) 实际上捕获所有异常吗?的主要内容,如果未能解决你的问题,请参考以下文章
springboot中有了全局异常捕获,还需要try catch吗?