Condividi tramite


Asserzioni

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Standard

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Pro e Team

Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Legenda tabella:

Argomento applicabile

Si applica

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

Un'istruzione di asserzione specifica una condizione che ci si aspetta abbia valore True in un dato punto del programma. Se tale condizione non ha valore True, l'asserzione avrà esito negativo, l'esecuzione del programma sarà interrotta e verrà visualizzata la finestra di dialogo Asserzione non riuscita.

In Visual C++ le istruzioni di asserzione sono supportate sulla base dei seguenti costrutti:

È possibile utilizzare le asserzioni per:

Asserzioni MFC e della libreria di runtime del linguaggio C

Quando il debugger si interrompe a causa di un'asserzione MFC o della libreria di runtime del linguaggio C, passa al punto del codice sorgente in cui si è verificata l'asserzione, se tale codice è disponibile. Il messaggio relativo all'asserzione viene visualizzato nella finestra di output oltre che nella finestra di dialogo Asserzione non riuscita. Se si desidera salvare il messaggio relativo all'asserzione per poterlo utilizzare successivamente, è possibile copiarlo dalla finestra Output in una finestra di testo. La finestra Output può contenere anche altri messaggi di errore. Esaminare questi messaggi attentamente, poiché forniscono indizi della causa dell'esito negativo dell'asserzione.

Un esteso utilizzo di asserzioni nel codice consente di rilevare numerosi errori durante lo sviluppo. Una buona regola è scrivere un'asserzione per ciascun presupposto operato. Se si presuppone che un argomento non sia NULL, ad esempio, è possibile utilizzare un'istruzione di asserzione per controllare tale presupposto.

_DEBUG

Le istruzioni di asserzione vengono compilate solo quando _DEBUG è definito. Quando _DEBUG non è definito, il compilatore gestisce le asserzioni alla stregua di istruzioni nulle. Le istruzioni di asserzione presentano pertanto un sovraccarico nullo nella versione finale del programma. È possibile utilizzarle liberamente nel codice, senza che questo influisca sulle prestazioni della versione di rilascio e senza dover utilizzare le direttive #ifdef.

Effetti secondari dell'utilizzo delle asserzioni

Quando si aggiungono asserzioni al codice, accertarsi che tali asserzioni non abbiano effetti secondari. Si consideri ad esempio la seguente asserzione:

ASSERT(nM++ > 0); // Don't do this!

Poiché l'espressione ASSERT non viene valutata nella versione di rilascio del programma, nM presenterà valori differenti nelle versioni di debug e di rilascio. In MFC è possibile utilizzare la macro VERIFY anziché ASSERT. VERIFY valuta l'espressione ma non controlla il risultato della versione di rilascio.

È necessario prestare particolare attenzione all'utilizzo di chiamate di funzione in istruzioni di asserzione, poiché la valutazione di una funzione può avere effetti secondari imprevisti.

ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects
VERIFY ( myFnctn(0)==1 ) // safe

VERIFY chiama myFnctn sia nelle versioni di debug che in quelle di rilascio e può pertanto essere utilizzato. Sarà tuttavia presente, comunque, il sovraccarico di una funzione non indispensabile nella versione di rilascio.

Vedere anche

Concetti

Protezione del debugger

Riferimenti

Asserzioni nel codice gestito

Altre risorse

Debug del codice nativo