gpt4 book ai didi

c++ - 捕获不使用 try/catch 抛出的异常

转载 作者:太空狗 更新时间:2023-10-29 19:54:32 24 4
gpt4 key购买 nike

我记得读过有关如何在不使用 try/catch 的情况下捕获异常的内容。基本上,当通过取消引用空指针引发异常(例如“未处理的异常”)时,即使没有为异常编码 try/catch,也会触发一个进程。我相信它与您编写然后包含在代码中的顶级库有关。不幸的是,关于这种方法的文档似乎不存在,但我以前见过/听说过这种方法。有人可以解释一下这是如何完成的吗?

最佳答案

在 C++ 中,取消引用空指针会导致未定义的行为,这并不一定意味着会引发异常。例如,在 Unix 系统上,会引发 SIGSEGV 信号。

在 Windows 上,访问冲突会引发 SEH异常(exception)。 SEH 异常与 C++ 异常不同;它们是使用 __try/__except 处理的语句(与 try/catch 语句相反)。未处理的 SEH 异常调用未处理的异常过滤器,您可以使用 SetUnhandledExceptionFilter 设置它.

#include <Windows.h>
#include <iostream>

LONG WINAPI MyFilter(EXCEPTION_POINTERS * /*ExceptionInfo*/)
{
std::cout << "An uncaught exception was detected!\n";

// Ultimately causes Windows Error Reporting to be invoked.
// Use EXCEPTION_EXECUTE_HANDLER to silently terminate the application.
return EXCEPTION_CONTINUE_SEARCH;
}

int main()
{
SetUnhandledExceptionFilter(MyFilter);
*(char volatile *)0 = 0;
}

关于c++ - 捕获不使用 try/catch 抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004763/

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