Condividi tramite


_ASSERT, macro di _ASSERTE

valutare un'espressione e generare un report di debug quando il risultato è False (versione di debug solo).

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parametri

  • booleanExpression
    Espressione (inclusi i puntatori) che restituisce un valore diverso da zero o 0.

Note

_ASSERT e _ASSERTE le macro forniscono una domanda con un sistema pulito e semplice per controllare i presupposti durante il processo di debug.Sono molto flessibile perché non devono essere racchiusi in #ifdef istruzioni per impedirne la essere chiamato in una build finale di un'applicazione.Questa flessibilità si ottiene utilizzando _DEBUG macro._ASSERT e _ASSERTE essere disponibile solo quando _DEBUG è definito.quando _DEBUG non è definito, le chiamate a queste macro vengono rimosse durante la pre-elaborazione.

_ASSERT e _ASSERTE valutare il loro booleanExpression argomento e quando il risultato è false (0), stampa un messaggio di diagnostica e una chiamata _CrtDbgReportW per generare un report di debug._ASSERT la macro stampa un messaggio di diagnostica semplice, mentre _ASSERTE include una rappresentazione di stringa dell'espressione non riuscita nel messaggio.Queste macro non hanno alcun effetto quando booleanExpression restituisce un valore diverso da zero.

_ASSERT e _ASSERTE richiamare _CrtDbgReportW, che comporta tutto l'output all'interno dei caratteri di tipo " wide " e _ASSERTE correttamente visualizza i caratteri unicode in booleanExpression.

Poiché _ASSERTE la macro specifica l'espressione non riuscita il rapporto generato, consente agli utenti per identificare il problema senza fare riferimento al codice sorgente dell'applicazione.Tuttavia, uno svantaggio è presente in quanto ogni espressione valutata da _ASSERTE è incluso nel file di output (la versione di debug) dell'applicazione come costante di stringa.Pertanto, se un elevato numero di chiamate a _ASSERTE, queste espressioni possono aumentare notevolmente la dimensione del file di output.

Se non diversamente specificato con _CrtSetReportMode e _CrtSetReportFile le funzioni, messaggi vengono visualizzati in un equivalente popup della finestra di dialogo all'impostazione:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReport o _CrtDbgReportW viene generato il report di debug e ne determina la destinazione o destinazioni, in base alla modalità Report o alle modalità corrente e archiviano definito per _CRT_ASSERT tipo di rapporto.Per impostazione predefinita, gli errori di asserzione e gli errori vengono indirizzati a una finestra di messaggio di debug._CrtSetReportMode e _CrtSetReportFile le funzioni vengono utilizzate per definire le destinazioni per ogni tipo di rapporto.

Quando la destinazione è una finestra di messaggio di debug e l'utente fa clic su tentativo pulsante, _CrtDbgReport o _CrtDbgReportW restituisce 1, provocando _ASSERT e _ASSERTE macro per avviare il debugger a condizione che il debug JIT (JIT) è abilitato.

Per ulteriori informazioni sul processo di creazione di rapporti, vedere _CrtDbgReport, _CrtDbgReportW funzione.Per ulteriori informazioni sulla risoluzione degli errori di asserzione e sull'utilizzo di queste macro come meccanismo di gestione degli errori di debug, vedere Utilizzando le macro per la verifica e la creazione di rapporti.

_RPT, _RPTF le macro di debug sono inoltre disponibili per la generazione di report di debug, ma non valutare un'espressione._RPT le macro generano un rapporto semplice._RPTF le macro includono il file di origine e il numero di riga in cui la macro del rapporto è stata chiamata nel rapporto generato.Oltre a _ASSERTE macro, ANSI asserzione la routine può essere utilizzata per verificare la logica di programma.Questa procedura è disponibile sia di debug e nelle versioni finali delle librerie.Le versioni di caratteri estesi di queste macro sono disponibili (_RPTWn, _RPTFWn).Le versioni di caratteri di tipo " wide " sono identiche alle versioni larghezza del carattere tranne che nelle stringhe di caratteri estesi vengono utilizzate per tutti i parametri di stringa e vengono restituite.

sebbene _ASSERT e _ASSERTE sono le macro e vengono ottenute includendo Crtdbg.h, l'applicazione deve collegarsi a una delle librerie poiché queste macro chiamano altre funzioni di runtime.

  • Libcmtd.lib
    Libreria statica Multithread, versione di debug.

  • Msvcrtd.lib
    libreria di importazione per Msvcr90d.dll, versione di debug.

Requisiti

Macro

Intestazione di associazione

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

Esempio

In questo programma, le chiamate vengono apportate a _ASSERT e _ASSERTE macro per verificare la condizione string1 == string2.Se la condizione non riesce, queste macro stampa un messaggio diagnostico._RPTn e _RPTFn il gruppo di macro viene eseguito in questo programma, in alternativa a l printf funzione.

// crt_ASSERT_macro.c
// compile with: /D_DEBUG /MTd /Od /Zi /link /verbose:lib /debug
//
// This program uses the _ASSERT and _ASSERTE debugging macros.
//

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

int main()
{
   char *p1, *p2;

   // The Reporting Mode and File must be specified
   // before generating a debug report via an assert
   // or report macro.
   // This program sends all report types to STDOUT.
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);

   // Allocate and assign the pointer variables.
   p1 = (char *)malloc(10);
   strcpy_s(p1, 10, "I am p1");
   p2 = (char *)malloc(10);
   strcpy_s(p2, 10, "I am p2");

   // Use the report macros as a debugging
   // warning mechanism, similar to printf.
   // Use the assert macros to check if the 
   // p1 and p2 variables are equivalent.
   // If the expression fails, _ASSERTE will
   // include a string representation of the
   // failed expression in the report.
   // _ASSERT does not include the
   // expression in the generated report.
   _RPT0(_CRT_WARN,
       "Use the assert macros to evaluate the expression p1 == p2.\n");
   _RPTF2(_CRT_WARN, "\n Will _ASSERT find '%s' == '%s' ?\n", p1, p2);
   _ASSERT(p1 == p2);

   _RPTF2(_CRT_WARN, "\n\n Will _ASSERTE find '%s' == '%s' ?\n",
          p1, p2);
   _ASSERTE(p1 == p2);

   _RPT2(_CRT_ERROR, "'%s' != '%s'\n", p1, p2);

   free(p2);
   free(p1);

   return 0;
}
  
  
  
  
  

Equivalente .NET Framework

System:: diagnostica:: debug:: asserzione

Vedere anche

Riferimenti

Procedura di debug

_RPT, _RPTF, _RPTW, macro di _RPTFW