【问题标题】:Is it possible to catch hardware errors in C++?是否可以在 C++ 中捕获硬件错误?
【发布时间】:2016-12-05 10:12:03
【问题描述】:

这段 C++ 代码崩溃,因为它包含被零除的错误:

int main()
{
    try {
        int i = 0;
        int j = 1 / i;
    } catch(...) {}
    return 0;
}

是否有可能在不同的平台上捕捉到这样的错误?如果你只知道一些平台,那么你可能会回答你知道的那些。

我对 Windows 上的 SEH 和 Linux 上的信号有一个基本的了解,但我不确定是否有一种方法可以像 C++ 中的软件错误一样捕获各种硬件错误。

最后,看起来除零异常可以在 Python 中捕获:

try:
    i = 0
    j = 1 / i
except:
    pass

在 Java 中:

public class Main {
    public static void main(String[] args) {
        try {
            int i = 0;
            int j = 1 / i;
        } catch (Exception e) {}
    }
}

那么是什么阻止了它们被 C++ 捕获?

【问题讨论】:

  • 这是一个未定义的行为,它不是一个例外
  • 如果您将其缩小到单个平台,您将有更好的机会得到答案。就目前而言,它相当广泛。
  • 阻止他们陷入 C++ 的原因是 C++ 已经决定“尽可能快,即使这意味着不同平台的行为不同”。因此,1/0 只保留所有寄存器不变的平台就可以了。 Java 和 Python 已决定“所有平台的行为都相同”,因此在进行划分之前必须检查是否为零。
  • 独立平台?不,C++ 语言对此没有任何支持。正如您在问题中提到的那样,这必然是特定于平台的。除非您将其缩小到特定平台,否则这是您将获得的最佳答案。而且我不认为这是一个实际的答案,所以我投票结束这个问题,因为“太宽泛”了。

标签: c++ linux windows macos exception


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 2019-04-02
  • 2015-09-10
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多