如何在多线程应用程序中从断言失败中优雅地退出

How to exit gracefully from an assertion failure in a multithreaded application

本文关键字:失败 退出 断言 多线程 应用程序      更新时间:2023-10-16

在多线程应用程序中,我使用以下ASSERT宏来捕获调试单元测试期间的编码和数据错误

#ifndef NDEBUG
#define ASSERT(condition, message) 
do { 
    if (! (condition)) { 
        std::cerr << "Assertion `" #condition "` failed in " << __FILE__ 
        << " line " << __LINE__ << ": " << message << std::endl; 
        std::exit( EXIT_FAILURE ); 
    } 
} while (false)
#else
#define ASSERT(condition, message) do { } while( false )
#endif

它基本上满足了我的需求,除了严重需要更换的讨厌的std::exit( EXIT_FAILURE );。在它的当前形式中,我得到了双重删除和各种混淆断言消息的肮脏行为。

如何从多线程应用程序中的断言失败中优雅退出

也许我应该从断言中抛出,然后从main()中抛出catch + return(1)?(我不确定这样做的后果,所以我对各种选项完全开放)

虽然_exit既快速又脏,但它在大多数平台上都能完美工作。

相关文章: