1

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

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

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

ありがとう!

Microsoft Visual C++ Debug Library ASSERT http://img519.imageshack.us/img519/853/snapshotbu1.png

4

3 に答える 3

2

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

于 2008-10-03T10:06:42.153 に答える
1

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

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

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

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

于 2008-10-02T17:29:35.600 に答える
0

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

次を使用して指定されているように、レポートフック関数をスローすることでそれを行います。_CrtSetReportHook()

于 2010-03-18T11:38:01.827 に答える