2012-02-01 11 views
3

マルチスレッドアプリケーションでは、デバッグユニットテストの間に、次の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()から? (私はこれを行うことの結果を確信していないので、さまざまなオプションに完全に対応しています)

+2

Hmm。 'std :: abort'? –

+2

はい、例外をスローします。ただし、マルチスレッド環境での例外伝播については読んでください。 –

+0

@KerrekSB - ty - トピックについてグーグルで調べ始めます – kfmfe04

答えて

1

素早く汚れていますが、_exitはほとんどのプラットフォームで完全に機能します。

+0

+1 ty - これはうまくいくようです - 実際に_exit()で何が起こっているかを詳しく説明できますか? (私もgoogleに)私はその制限を理解することができるなら、私は他の文脈でこの呼び出しのために使用するかもしれません。 – kfmfe04

+0

呼び出しプロセスの準即時、無条件、無作為な終了を行います。 –

関連する問題