Korzystanie z VERIFY zamiast ASSERT

Załóżmy, że po uruchomieniu wersji debugowania aplikacji MFC nie ma żadnych problemów.Jednak wersji tej samej aplikacji ulega awarii, zwraca nieprawidłowe wyniki, i/lub nieprawidłowe działanie wykazuje celowość.

Ten problem może być spowodowane po umieszczeniu ważny kod w instrukcji ASSERT, aby sprawdzić, czy działa poprawnie.Ponieważ ASSERT instrukcje są przekształcane w wydanej kompilacji programu MFC, kod nie działa w wydanej kompilacji.

Jeśli używasz ASSERT celu potwierdzenia, że udało się wywołanie funkcji, należy rozważyć użycie VERIFY w zamian.Makro WERYFIKUJ ocenia argumenty w obu debugowania i buduje wersji aplikacji.

Innego preferowanego technika jest przypisać wartość zwracana przez funkcję do zmiennej tymczasowej, a następnie przetestować zmiennej w instrukcji ASSERT.

Sprawdź poniższy fragment kodu:

enum {
    sizeOfBuffer = 20
};
char *buf;
ASSERT(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Ten kod uruchamia idealnie wersji debug aplikacji MFC.Jeśli wywołanie calloc( ) pojawia się komunikat diagnostyczny, zawierający plik i numerem wiersza się nie powiedzie,.Jednakże w handlu detalicznym budowanie aplikacji MFC:

  • wywołanie calloc( ) nigdy nie występuje, pozostawiając buf odinicjowany, lub

  • strcpy_s( )kopie "Hello, World" w losowej kawałek pamięci, ewentualnie awarii aplikacji lub że system przestanie odpowiadać, lub

  • free()próbę zwolnienia pamięci, która nie została przydzielona.

Aby prawidłowo używać ASSERT, przykładowy kod należy zmienić na następujące czynności:

enum {
    sizeOfBuffer = 20
};
char *buf;
buf = (char *) calloc(sizeOfBuffer, sizeof(char) );
ASSERT( buf != NULL );
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Lub sprawdź można użyć zamiast tego:

enum {
    sizeOfBuffer = 20
};
char *buf;
VERIFY(buf = (char *) calloc(sizeOfBuffer, sizeof(char) ));
strcpy_s( buf, sizeOfBuffer, "Hello, World" );
free( buf );

Zobacz też

Informacje

Naprawianie problemów kompilacji wydania