Macros de relatório
Este tópico se aplica a:
Edição |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
Somente nativo |
|||
Padrão |
Somente nativo |
|||
PRO e equipe |
Somente nativo |
Legenda de tabela:
Aplica-se |
|
Não é aplicada |
|
Comando ou comandos oculta por padrão. |
Você pode usar o _RPTn, and _RPTFn macros, definidas no 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 estiver definido, portanto, não há necessidade de incluí-los entre # ifdefs.
Macro |
Função |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
Produz uma seqüência de mensagem e zero para quatro argumentos. For _RPT1 por meio de _RPT4, a cadeia de caracteres da mensagem serve sistema autônomo um printf-seqüência de caracteres para sistema autônomo argumentos de formatação de estilo. |
_RPTF0, _RPTF1, _RPTF2, _RPTF4, |
Same sistema autônomo _RPTn , mas essas macros de saída também o arquivo de nome e o número de linha onde a macro está localizada. |
Considere o exemplo a seguir:
#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 telefonar de _RPTF2 para relatório esses mesmos valores e, além disso, o arquivo de nome e o número de linha:
if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );
Se você achar que um aplicativo específico precisa depurar a emissão de relatórios que não fornecem as macros fornecidas com a biblioteca de time de execução C, você pode gravar uma macro projetada especificamente para seus próprios requisitos.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 telefonar para ALERT_IF2 poderia executar todas as funções do printf código no início deste tópico:
ALERT_IF2(someVar > MAX_SOMEVAR, "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n", someVar, otherVar );
Porque um esistema autônomoily podem de macro personalizado ser alterado para relatar mais ou menos informações para diferentes destinos (dependendo do que é mais conveniente), essa abordagem pode ser especialmente útil sistema autônomo evolução das exigências de depuração.