マルチスレッドアプリケーションでは、デバッグユニットテストの間に、次の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()
から? (私はこれを行うことの結果を確信していないので、さまざまなオプションに完全に対応しています)
Hmm。 'std :: abort'? –
はい、例外をスローします。ただし、マルチスレッド環境での例外伝播については読んでください。 –
@KerrekSB - ty - トピックについてグーグルで調べ始めます – kfmfe04