3

Windows/c++ では、アサーションを永久に無視するようにアサーション ダイアログ ボックスをカスタマイズしたいので、アサーションをより積極的に使用できます。正しい assert マクロを記述するのがいかに難しいかは理解していますが、これはしたくありません。ダイアログ コードをフックするだけです。これを行う簡単な方法 (または簡潔なハック) はありますか?

assert マクロの危険性に関する記事(googlecache)

更新: より積極的 => はるかに頻繁に使用し、クラッシュしないバグに使用します。アサーションを永遠に無視できるようにしたいので、ループでマイナーなバグ アサーションが発生しても、プロセスが効果的に停止することはありません。

4

4 に答える 4

2

「より積極的に」というのがエラー処理にアサーションを使用することを意味する場合は、例外を使用する方が適切です。

于 2009-02-09T14:57:47.873 に答える
2

_CrtSetReportHook 関数または新しい_CrtSetReportHook2を調べてください。これを使用して、「見た」メッセージを記憶し、再び見たときに処理済みとして報告するフックをインストールできます。

于 2009-02-09T16:58:31.653 に答える
1

Follow the teachings of our embedded master Miro Samek:

An exception or a bug?

Scroll down for customizing the behaviour of assert. (But do read everything else.)

于 2009-02-09T17:11:45.773 に答える
0

コードがスレッドセーフである必要がなく、プログラムが実行されるたびにアサーションが最初に実行された後は無視されるという意味で「永久に」アサーションを無視したいだけで、その意味で永久に無視されない場合最初は無視し、その後はすべてのプログラム実行で再度起動することはありません。その後、アサーション テストと、デフォルトで false に設定されている静的ブール値を組み合わせるだけです。

void someFunc(...)
{
...
static bool bFireAssertion( false );

ASSERT( bFireAssertion || <your assertion test> );
...
}

次に、起動を停止したい場合は、デバッガー内から bFireAssertion を true に設定します。常に true であるため、ASSERT は短絡し、テストを評価しなくなります。

于 2009-02-09T20:18:41.127 に答える