Compartir a través de


Macros para los informes

Este tema se aplica a:

Edición

Visual Basic

C#

F#

C++

Web Developer

Express

El tema no es aplicable El tema no es aplicable El tema no es aplicable

Sólo para código nativo

El tema no es aplicable

Pro, Premium y Ultimate

El tema no es aplicable El tema no es aplicable El tema no es aplicable

Sólo para código nativo

El tema no es aplicable

Las macros _RPTn y _RPTFn, definidas en CRTDBG.H, se pueden utilizar para reemplazar el uso de instrucciones printf para la depuración. Estas macros desaparecen automáticamente en la versión de lanzamiento cuando _DEBUG no está definido, de modo que no es necesario encerrarlas entre #ifdefs.

Macro

Función

_RPT0, _RPT1, _RPT2, _RPT3, _RPT4

Escribe una cadena de mensaje y cero en cuatro argumentos.

Para _RPT1 a _RPT4, la cadena de mensaje actúa como una cadena de formato al estilo de printf para los argumentos.

_RPTF0, _RPTF1, _RPTF2, _RPTF4,

Igual que _RPTn, pero estas macros también escriben el nombre del archivo y el número de línea donde se encuentra la macro.

Considere el ejemplo siguiente:

#ifdef _DEBUG
    if ( someVar > MAX_SOMEVAR )
        printf( "OVERFLOW! In NameOfThisFunc( ),
               someVar=%d, otherVar=%d.\n",
               someVar, otherVar );
#endif

Este código escribe los valores de someVar y otherVar en stdout. Se puede utilizar la siguiente llamada a _RPTF2 para informar de estos mismos valores y, además, del nombre del archivo y el número de línea:

if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );

Si una determinada aplicación debe proporcionar información de depuración que las macros de la biblioteca CRT no ofrecen, puede escribir una macro diseñada específicamente para satisfacer sus propios requisitos. En uno de los archivos de encabezado, por ejemplo, se podría incluir código como el siguiente para definir una macro denominada ALERT_IF2:

#ifndef _DEBUG                  /* For RELEASE builds */
#define  ALERT_IF2(expr, msg, arg1, arg2)  do {} while (0)
#else                           /* For DEBUG builds   */
#define  ALERT_IF2(expr, msg, arg1, arg2) \
    do { \
        if ((expr) && \
            (1 == _CrtDbgReport(_CRT_ERROR, \
                __FILE__, __LINE__, msg, arg1, arg2))) \
            _CrtDbgBreak( ); \
    } while (0)
#endif

Una llamada a ALERT_IF2 podría ejecutar todas las funciones del código printf del inicio de este tema:

ALERT_IF2(someVar > MAX_SOMEVAR, "OVERFLOW! In NameOfThisFunc( ), 
someVar=%d, otherVar=%d.\n", someVar, otherVar );

Como una macro personalizada se puede cambiar fácilmente de modo que proporcione más o menos información para diferentes destinos (según convenga), este enfoque puede resultar particularmente útil a medida que los requisitos evolucionan.

Vea también

Otros recursos

Técnicas de depuración de CRT