Makra dla raportowania
Można użyć _RPTn, i _RPTFn makra, określonych w CRTDBG.H, aby zastąpić wykorzystanie printf sprawozdania dotyczące debugowania.Te makra są automatycznie znikają w używanego wydania podczas tworzenia _DEBUG nie jest zdefiniowana, więc nie trzeba ująć w # ifdefs.
Makro |
Funkcja |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
Wyświetla ciąg wiadomości i zera do czterech argumentów. Dla _RPT1 przez _RPT4, message string służy jako printf-styl formatowania ciągu dla argumentów. |
_RPTF0, _RPTF1,_RPTF2,_RPTF4, |
Podobnie jak _RPTn , ale tych makr również wyjściowy plik numer nazwy i linii 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 wyjścia wartości someVar i otherVar do stdout.Można zastosować poniższe wywołanie do _RPTF2 sprawozdania te tej samej wartości oraz dodatkowo, numer pliku nazwa i linii:
if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );
Jeśli okaże się, że dana aplikacja wymaga debug sprawozdawczości, które oferuje makra dostarczane z biblioteki uruchomieniowej C, można napisać makra zaprojektowane specjalnie do własnych wymagań.W jednym z plików nagłówka, na przykład, możesz dołączyć kodu, takie jak następujące 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 wykonywać wszystkie funkcje printf kodu 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ć zgłosić więcej lub mniej informacji do różnych miejsc docelowych (zależności co to jest wygodniejsze), podejście to może być szczególnie użyteczne jak ewoluować wymagań dotyczących debugowania.