在多線程應用程序中,我使用以下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()
? (我不確定這樣做的後果,所以我完全開放各種選項)
嗯。 '的std :: abort'? – 2012-02-01 07:21:02
是的,拋出異常。不過,請閱讀多線程環境中的異常傳播。 – 2012-02-01 07:21:36
@KerrekSB - ty - 我將開始在主題上使用Google搜索 – kfmfe04 2012-02-01 07:22:58