如何在多线程应用程序中从断言失败中优雅地退出
How to exit gracefully from an assertion failure in a multithreaded application
在多线程应用程序中,我使用以下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
既快速又脏,但它在大多数平台上都能完美工作。
相关文章:
- 如何让LLDB在成功时退出,在失败时等待
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- QDateTime::toString() 在退出处理程序中使用时失败
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Xcode:链接器命令失败,退出代码为 1(使用 -v 查看调用)[C++]
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- Xcode 10.0:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 链接器命令失败,退出代码 1 C++
- 链接器命令失败,退出代码 1 Xcode 9
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 运行失败(退出值1)c++