Sdílet prostřednictvím


Použití příkazu VERIFY místo ASSERT

Předpokládejme, že při spuštění ladicí verze aplikace MFC nejsou žádné problémy. Verze stejné aplikace se ale chybově ukončí, vrátí nesprávné výsledky a/nebo vykazuje jiné neobvyklé chování.

Tento problém může být způsoben tak, že do příkazu ASSERT umístíte důležitý kód, který ověří, že funguje správně. Vzhledem k tomu, že příkazy ASSERT jsou okomentovány v sestavení vydané verze programu MFC, kód se nespustí v sestavení vydané verze.

Pokud k potvrzení úspěšného volání funkce používáte ASSERT, zvažte místo toho použití funkce VERIFY . Makro VERIFY vyhodnocuje své vlastní argumenty v sestaveních ladění i vydané verze aplikace.

Další upřednostňovanou technikou je přiřazení návratové hodnoty funkce k dočasné proměnné a následné otestování proměnné v příkazu ASSERT.

Prozkoumejte následující fragment kódu:

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

Tento kód se dokonale spustí v ladicí verzi aplikace MFC. Pokud volání calloc( ) selže, zobrazí se diagnostická zpráva, která obsahuje soubor a číslo řádku. V maloobchodním sestavení aplikace MFC však:

  • k volání, ke kterému calloc( ) nikdy nedojde, opuštění buf neinicializované nebo

  • strcpy_s( ) zkopíruje "Hello, World" do náhodné části paměti, pravděpodobně dojde k chybě aplikace nebo způsobí, že systém přestane reagovat, nebo

  • free() pokusy o uvolnění paměti, která nebyla nikdy přidělena.

Pokud chcete použít příkaz ASSERT správně, měl by se vzorový kód změnit na následující:

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

Nebo můžete místo toho použít funkci VERIFY:

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

Viz také

Oprava problémů se sestavením pro vydání