Шаг 21 - Макросы остановки по условию (VERIFY,ASSERT)

В MFC есть два макроса, которыми можно пользоваться, кстати, и без MFC. Эти макросы проверяют условия выражения и останавливают программу. Для их использования нужен только afx.h. Эти два макроса практически одно и тоже.

#define VERIFY(f) 	ASSERT(f)

А сам ASSERT использует AfxDebugBreak():

#define ASSERT(f) \
	do \
	{ \
	if (!(f) && AfxAssertFailedLine(THIS_FILE, __LINE__)) \
		AfxDebugBreak(); \
	} while (0) \

Пользоваться ими предпочтительнее, так как не нужно заботиться о разности версий. Все уже описано в заголовочных файлах и не будет включено в конечную версию. Можно сказать, что это 4 и последний уровень. Давайте попробуем воспользоваться.

void test()
{
	int y;
	y=234;
	for (int x=0;x<10000;x++)
	{
		strs ss;
		ss.i = 10;
		ss.j = 5;
		y=y+y;
		ASSERT(x!=10);
	}
}

Пока x не станет равной 10 ничего не будет происходить. А вот когда 10, то произойдет прерывания программы, но информационное окно будет уже другое.

21_1.gif (8008 b)

Оно нам предлагает уже три варианта, прервать программу, повторить и пропустить. Если нажать повтор (Retry), то мы попадем как раз в отладку.

21_2.gif (4323 b)

Все нормально, мы остановились на 10.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 30.07.2002