Как изящно завершить работу с ошибкой утверждения в многопоточном приложении - PullRequest
3 голосов
/ 01 февраля 2012

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

1 Ответ

1 голос
/ 01 февраля 2012

Хотя он быстрый и грязный, _exit отлично работает на большинстве платформ.

...