我做了这个测试,看看发生了什么:
try
{
int *x = 0;
*x = 1234;
}
catch(...)
{
cout << "OK";
}
但是它引发了一个段错误,为什么它不会遇到段错误?
答案 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