Partilhar via


Macros para emissão de relatórios

This topic applies to:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Pro, Premium e Ultimate

O tópico não é aplicável O tópico não é aplicável O tópico não é aplicável

Native only

O tópico não é aplicável

Você pode usar o _RPTn, e _RPTFn macros, definidas em CRTDBG.H, para substituir o uso de printf instruções para depuração. Essas macros desaparecem automaticamente na sua versão de compilação quando _ Debug não for definido, portanto, não é necessário colocá-los na # ifdefs.

Macro

Function

_RPT0, _RPT1, _RPT2, _RPT3, _RPT4

Gera uma seqüência de mensagem e de zero a quatro argumentos.

Para _RPT1 por meio de _RPT4, a seqüência de caracteres de mensagem serve como um printf-seqüência de caracteres para os argumentos de formatação de estilo.

_RPTF0, _RPTF1, _RPTF2, _RPTF4,

Mesmo que _RPTn , mas essas macros também o número de linha e o nome do arquivo onde se encontra a macro de saída.

Consider the following example:

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

Este código gera os valores de someVar e otherVar para stdout. Você pode usar a seguinte chamada _RPTF2 para relatar esses mesmos valores e, além disso, o número de linha e o nome do arquivo:

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

Se você achar que um determinado aplicativo precisa de depurar a emissão de relatórios que não fornecem as macros fornecidas com a biblioteca de tempo de execução C, você pode gravar uma macro projetada especificamente para suas próprias necessidades. Em um dos seus arquivos de cabeçalho, por exemplo, você poderia incluir código como o seguinte para definir uma macro chamada 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

Uma chamada para ALERT_IF2 foi possível executar todas as funções da printf o código no início deste tópico:

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

Porque uma macro personalizada pode ser alterada facilmente para relatar mais ou menos informações para diferentes destinos (dependendo do que é mais conveniente), essa abordagem pode ser especialmente útil conforme a evolução de suas necessidades de depuração.

Consulte também

Outros recursos

Técnicas de depuração CRT