gpt4 book ai didi

windows - C++ try-catch block 不捕获硬件异常

转载 作者:可可西里 更新时间:2023-11-01 13:40:37 25 4
gpt4 key购买 nike

我正在检查 visual studio 2013 中的硬件和软件异常。我知道我可以通过将“启用 C++ 异常”选项设置为/EHa(是,有 SEH 异常)来捕获硬件异常。我正在 try catch 以下异常:

EXCEPTION_ARRAY_BOUNDS_EXCEEDED - 没有捕捉到

EXCEPTION_ACCESS_VIOLATION - 已捕获

EXCEPTION_INT_OVERFLOW - 没有捕捉到

EXCEPTION_INT_DIVIDE_BY_ZERO - 捕获

这是一个代码示例。

try {
a = std::numeric_limits<int>::max();
a += 5;
}
catch (...){

std::cout << "EXCEPTION_INT_OVERFLOW Exception Caught" << std::endl;
exit(1);
}

try {
int h = 0;
b = b / h;
}
catch (...){

std::cout << "EXCEPTION_INT_DIVIDE_BY_ZERO Exception Caught" << std::endl;
exit(1);
}

它只捕获被零除异常。这取决于处理器,还是有其他原因?还有一个小问题,调试版本和发布版本之间有什么区别吗?

最佳答案

Is this dependent of processor

是的。操作系统仅将硬件陷阱映射到结构化异常,它不会添加逻辑来检测硬件没有检测到的条件。 (另一方面,JVM 或 CLR 等托管框架通常会添加逻辑。在软件中捕获这些逻辑当然会带来性能损失,而硬件陷阱逻辑是免费的,除非陷阱实际发生。)

现在,这并不是说您不能在 x86 处理器上接收到 EXCEPTION_INT_OVERFLOW。但条件不是您所期望的——加法期间的简单回绕不会导致陷阱。请参阅 Raymond Chen 的博客条目:

关于windows - C++ try-catch block 不捕获硬件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736593/

25 4 0
文章推荐: php: "notice"在不同机器上的警告
文章推荐: html - 对齐 3 个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com