Makra raportowania

Można użyć _RPTn, i _RPTFn makra, zdefiniowane w CRTDBG.H, aby zastąpić stosowanie printf instrukcji do debugowania.Makra te automatycznie znikają w swojej wersji podczas budowy _DEBUG nie jest zdefiniowana, więc nie ma potrzeby, należy ująć je w #ifdefs.

Makro

Opis

_RPT0, _RPT1, _RPT2, _RPT3, _RPT4

Wyświetla ciąg wiadomości i zera do czterech argumentów.Dla _RPT1 przez _RPT4, ciąg wiadomości służy jako ciąg formatowania stylu printf dla argumentów.

_RPTF0, _RPTF1, ,_RPTF2, _RPTF4

Taki sam jak _RPTn , ale tych makr również wyjściowy plik nazwą i numerem wiersza gdzie znajduje się makro.

Rozważmy następujący przykład:

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

Ten kod wyświetla wartości someVar i otherVar do stdout.Można zastosować poniższe wywołanie do _RPTF2 z raportu te te same wartości i, dodatkowo, nazwa i wiersza numer pliku:

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

Jeśli okaże się, że określona aplikacja potrzebuje debugowania, sprawozdawczość, które nie zapewniają makra dostarczane z biblioteki wykonawczej C, należy napisać makro zaprojektowany specjalnie do własnych wymagań.W jednym z plików nagłówka, na przykład, można to kod jak następujących czynności, aby zdefiniować makro o nazwie 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

Jedno wywołanie ALERT_IF2 może wykonać wszystkie funkcje printf kod na początku tego tematu:

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

Ponieważ niestandardowe makra można łatwo zmienić, aby zgłosić więcej lub mniej informacji w różne miejsca docelowe (w zależności od co jest wygodniejsze), takie podejście może być szczególnie przydatne, jak debugowania wymagania rozwijać.

Zobacz też

Inne zasoby

Techniki testowania CRT