Sdílet prostřednictvím


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

Předpokládejme, že když spustíte ladicí verze aplikace knihovny MFC, nebyly zaznamenány žádné problémy.Verzi stejné aplikace, dojde k chybě, vrací nesprávné výsledky nebo vykazuje některé neobvyklé chování.

Tento problém může dojít při umístění důležitých kódu v příkazu ASSERT, chcete-li ověřit, že provádí správně.Vzhledem k tomu, že vyhodnocení výkazů jsou zakomentovány ve vydané verzi aplikace knihovny MFC, kód nelze spustit ve vydané verzi.

Používáte-li k potvrzení, že volání funkce úspěšně ASSERT, zvažte použití VERIFY místo.Makro ověřit vyhodnocuje vlastní argumenty obě a vydaná sestavení aplikace.

Jiné upřednostňované technika je návratová hodnota funkce přiřadit dočasnou proměnnou a poté otestovat 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 spustí zcela v ladicí verze aplikace knihovny MFC.Pokud volání calloc( ) se zobrazí diagnostickou zprávu, která obsahuje soubor a číslo řádku, se nezdaří.Nicméně v maloobchodní sestavení aplikace knihovny MFC:

  • volání calloc( ) nikdy nedošlo, opustit buf inicializovat, nebo

  • strcpy_s( )kopie "Hello, World" do náhodné část paměti, případně selhání aplikace nebo příčinou systém přestane reagovat, nebo

  • free()se pokusí uvolnit paměť, která byla přidělena nikdy.

Chcete-li správně použít ASSERT, by měl být změněn ukázkový kód 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 použít místo ověřit:

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

Viz také

Referenční dokumentace

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