是否有可能通过try / catch捕获段错误?

时间:2016-10-20 02:48:19

标签: c++ try-catch

我做了这个测试,看看发生了什么:

try
{
    int *x = 0;
    *x = 1234;
}
catch(...)
{
    cout << "OK";
}

但是它引发了一个段错误,为什么它不会遇到段错误?

2 个答案:

答案 0 :(得分:3)

不,你不能。

#define RPI_DQ_GPIO_PIN 4 #define FUN_ALT0_SET 0x4 ds18b20_gpio_function(RPI_DQ_GPIO_PIN, FUN_ALT0_SET); 不是常规例外。

您展示的代码只是未定义的行为,任何事情都可能发生。不能保证最终会抛出异常。

答案 1 :(得分:0)

这个答案非常具体针对WINDOWS。

您可以使用结构化异常处理。

你必须调用“SetUnhandledExceptionFilter” https://msdn.microsoft.com/en-us/library/ms680634(v=vs.85).aspx

用法原型:

您必须在申请开始时注册一项功能

SetUnhandledExceptionFilter(UnhandledExceptionFilterFunction);

定义您的注册功能,处理您的业务。 通常人们会收集coredump并将电子邮件发送给开发团队。

LONG WINAPI UnhandledExceptionFilterFunction(PEXCEPTION_POINTERS exception)
{


// The exception information is available in  PEXCEPTION_POINTERS 

}

请参阅以下链接了解PEXCEPTION_POINTERS https://msdn.microsoft.com/en-us/library/windows/desktop/ms679331(v=vs.85).aspx

以下是“PEXCEPTION_POINTERS”中的异常记录列表。第一个是“EXCEPTION_ACCESS_VIOLATION”(以LINUX术语SEGFAULT)

https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082(v=vs.85).aspx