настройка макросов assert - PullRequest
3 голосов
/ 09 февраля 2009

В Windows / c ++ я хочу настроить диалоговое окно подтверждения так, чтобы оно всегда игнорировалось, поэтому я могу быть более агрессивным в отношении утверждений. Я понимаю, как сложно написать правильный макрос assert, и не хочу этого делать, просто перехватите диалоговый код. Есть ли простой способ (или краткий взлом) сделать это?

статья об угрозе утверждения макросов (googlecache)

обновление: более агрессивно => использовать гораздо чаще и для не сбойных ошибок . Я хочу иметь возможность навсегда игнорировать утверждение, поэтому, если в цикле происходит незначительное утверждение ошибки, это не останавливает мой процесс.

Ответы [ 4 ]

2 голосов
/ 09 февраля 2009

Загляните в _CrtSetReportHook или более новая функция _CrtSetReportHook2 . Вы можете использовать его для установки хука, который запоминает «увиденные» сообщения и сообщает о них как о обработанных при повторном просмотре.

2 голосов
/ 09 февраля 2009

Если под «более агрессивным» вы подразумеваете использование утверждений для обработки ошибок, то лучше использовать исключения.

1 голос
/ 09 февраля 2009

Следуйте указаниям нашего встроенного мастера Миро Самек :

Исключение или ошибка?

Прокрутите вниз для настройки поведения assert. (Но прочитайте все остальное.)

0 голосов
/ 09 февраля 2009

Если код не должен быть потокобезопасным, и если вы хотите игнорировать утверждения «навсегда» в том смысле, что они будут игнорироваться после первого раза каждый раз программа выполняется, и не навсегда в том смысле, что вы игнорируете его в первый раз, и после этого он никогда не запускается снова для всех программных запусков, а затем просто комбинирует проверочный тест со статическим bool, для которого по умолчанию установлено значение false .

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

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

затем, когда вы хотите, чтобы он прекратил запуск, установите bFireAssertion в true из отладчика. Так как это всегда будет верно, ASSERT будет закорачивать и больше не оценивать ваш тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...