В многопоточном приложении я использую следующий макрос 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 );
, который серьезно нуждается в замене. В его нынешнем виде я получаю двойное удаление и всякую мерзость, которая скрывает сообщение с утверждением.
Как изящно выйти из ошибок подтверждения в многопоточном приложении ?
Возможно, мне следует выбросить из утверждения, а затем catch + return(1)
из main()
?
(Я не уверен в последствиях этого, поэтому я полностью открыт для различных вариантов)