gpt4 book ai didi

c++ - 是否可以在各种失败情况下(例如异常)在程序终止之前自动刷新 std::cout

转载 作者:行者123 更新时间:2023-12-02 09:53:27 24 4
gpt4 key购买 nike

如果抛出异常,则缺少刷新的标准输出会使诊断问题变得更加困难。有没有可以使用的缓解措施? (例如,终止 Hook 、编译器标志等)。我可以理解,在段错误中可能很难刷新,但我认为对于任意线程中未捕获的异常,它至少在理论上应该是可能的。

注意:由于可以使用多个线程,情况会稍微复杂一些。所以在 main 中捕获异常不适用于其他线程。

最佳答案

当程序因未捕获异常而终止时,std::terminate将被调用。这将调用已使用 std::set_terminate 注册的终止处理程序。 .在此终止处理程序中,您可以刷新标准输出流。
std::terminate在某些其他情况下也会调用,例如从 noexcept 中抛出异常。函数,可连接的破坏std::thread ,直接从用户代码调用等。

如果程序被操作系统终止,这将无济于事。这只能通过 disabling buffering 来解决.你可以 试试在信号处理程序中刷新作为一种绝望的措施,但这不能保证成功,也不能保证有预期的行为,因为刷新不是异步安全操作。

关于c++ - 是否可以在各种失败情况下(例如异常)在程序终止之前自动刷新 std::cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62326830/

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