gpt4 book ai didi

c++ - 处理系统调用\标准库异常故障

转载 作者:行者123 更新时间:2023-11-28 05:40:10 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




这个问题可能应该分成两部分,因为它是关于两种不同的语言和两种不同的错误处理方法。但是,在我看来,它对应于 C++ 和 C,因为它们的根源非常普遍。

所以问题是 - 我应该如何处理与整体系统状态相关的各种错误,这在技术上是可能的,但如果它们发生了,那么这意味着已经有一些事情正在发生(或已经发生)非常糟糕的事情?我的意思是malloc()返回 NULL , new throw bad_alloc , Windows\Linux socket函数报告“系统中没有剩余的空闲套接字”、线程堆栈溢出等。

此外,我应该处理它们吗?我知道在理想情况下,我们必须处理所有可能的错误,因此最终用户会看到“系统故障:无法分配足够的内存”而不是“未处理的 'bad_alloc' 类型的异常”和“系统故障:无法” t 创建套接字”而不是“在 0x00000000 上拒绝访问”。在 C++ 中,我们可以输入 int main()像这样的东西:

try {
Program().Run();
}
catch (std::exception e) {
std::cout << "System failure: " << e.what() << std::endl;
}
catch (...) {
std::cout << "Unknown system failure" << std::endl;
}

,但对我来说,如果我的程序以“kablams!内存无法读取”终止,或者是否有一些文本墙带有关于无法获取的句柄的巧妙词语,这并不重要。

澄清一下——我不是那种会说“naaah,我懒得写这个包装”的人。如果我明白这种错误可能会发生,我通常会尝试以某种方式处理它。我也不是在谈论此类事情每天都可能发生(尽管很少)的情况,例如在我们严格限制内存的嵌入式系统中。而不是像尝试打开不存在的文件这样的琐碎事情。我说的是您的经典 Linux\Windows C\C++ 程序,这些程序在相当稳定的环境中进行了测试,并且 99% 的时间都将在这样的环境中启动。

我的意思是,其中一些事情不仅是异常(exception)情况,而且在大多数情况下都有些“超越异常(exception)”。有时,如果我突然想起可能没有分配内存,或者读到某些系统特定的东西可能没有完成,我就会坐在那里挠头“等等,我真的应该考虑发生这种情况吗?.. "

最佳答案

如果您对错误有一个合理的响应,可以让您处理它并以理智的方式继续 - 比如,“如果这个巨大的缓冲区分配引发了 bad_alloc,我会捕获它并只使用一个较小的缓冲区” - 那么所有人意味着这样做。
如果您没有理智的追索权,那么要么让异常向上传播,要么报告错误返回值或其他任何东西,然后终止应用程序。

如果错误可以以理智的方式处理,并且程序可以在处理错误后继续,那就太好了。
在许多情况下,情况并非如此,你最好早点崩溃,而不是试图在一个不理智的​​状态下继续“世界”。

关于c++ - 处理系统调用\标准库异常故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284691/

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