В многопоточном приложении я использую следующий макрос 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()
? (Я не уверен в последствиях этого, поэтому я полностью открыт для различных вариантов)
Хм. 'Станд :: abort'? –
Да, выведите исключение. Тем не менее, читайте об распространении исключений в многопоточной среде. –
@KerrekSB - ty - я начну googling по теме – kfmfe04