質問

WindowsでASSERTステートメントが失敗すると、以下のデバッグメッセージが表示され、アプリケーションの実行がフリーズします。これは予想される動作ですが、ヘッドレスマシンで定期的に実行されているため、ユニットテストが失敗するのを防ぎ、代わりにユーザー入力を無期限に待機します。

ASSERTでのテストの失敗を許可しながら、このメッセージボックスがユーザー入力を要求しないようにするために使用できるレジストリキーまたはコンパイラフラグはありますか?

基本的に、コードを変更せずに、コンパイラまたはWindowsオプションを変更するだけでこれを実行したいです。

ありがとう!

Microsoft Visual C ++デバッグライブラリASSERT http ://img519.imageshack.us/img519/853/snapshotbu1.png

役に立ちましたか?

解決

ASSERTマクロに関するMSDNから:

MFC ISAPIアプリケーションでは、デバッグモードでのアサーションによりモーダルダイアログボックスが表示されます(ASSERTダイアログボックスはデフォルトでモーダルになりました)。これにより、実行が中断またはハングします。モーダルアサーションダイアログを抑制するには、プロジェクトソースファイル(projectname.cpp)に次の行を追加します。

// For custom assert and trace handling with WebDbg
#ifdef _DEBUG
CDebugReportHook g_ReportHook;
#endif

これを実行したら、WebDbgツール(WebDbg.exe)を使用してアサーションを確認できます。

他のヒント

これは、_CRT_ASSERTタイプのレポートに対して_CrtDbgReportによって表示されるダイアログだと思います。 _CrtSetReportHookを使用すると、アプリケーション全体の動作を調整できます。 (つまり、1つのローカル変更が必要です)特に、アサーションが失敗した後も実行を継続できるため、それを無視できます。

単体テストのコンテキストでは、ASSERT(実際には _CrtDbgReport 呼び出し)をいくつかの例外(通常は情報テキストを含むstd :: exception)に変換するとよい場合があります。 これは、失敗として単体テストの出力ログに到達する傾向があります。 それはまさにあなたが望むものです:失敗したASSERTは失敗した単体テストでなければなりません。

_CrtSetReportHook()

を使用して指定されているように、レポートフック関数をスローすることにより、それを実行します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top