Raporlama Makroları
Kullanabileceğiniz _RPTn, ve _RPTFn CRTDBG içinde tanımlı makrolar.Kullanımını değiştirmek için H, printf deyimleri hata ayıklama.Bu makrolar, sürüme otomatik olarak kaybolur ne zaman yapı _DEBUG bunları içine gerek olmadýðý için tanımlı değil #ifdefs.
Makro |
Tanımlama |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
İleti dizesi ve sıfır dört bağımsız olarak verir._RPT1 için _RPT4, ileti dizesi stil printf biçimlendirme dizesi bağımsız olarak hizmet verir. |
_RPTF0, _RPTF1, ,_RPTF2, _RPTF4 |
Aynı _RPTn , ancak bu makroları makro bulunduğu dosya adı ve satır numarası da çıktı. |
Aşağıdaki örneği inceleyin:
#ifdef _DEBUG
if ( someVar > MAX_SOMEVAR )
printf( "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n",
someVar, otherVar );
#endif
Bu kod değerlerini verir someVar ve otherVar için stdout.Şu çağrı için kullanabileceğiniz _RPTF2 bu aynı değerler ve buna ek olarak, dosya adı ve satır numarası bildirmek için:
if (someVar > MAX_SOMEVAR) _RPTF2(_CRT_WARN, "In NameOfThisFunc( ), someVar= %d, otherVar= %d\n", someVar, otherVar );
Belirli bir uygulama sağlayan C çalışma zamanı kitaplığı ile sağlanan makrolar değil raporlama debug gerektiğini fark ederseniz, özellikle kendi gereksinimlerinize uyacak şekilde tasarlanmış bir makro yazabilirsiniz.Bir başlık dosyaları gibi adlı bir makro tanımlamak için aşağıdaki gibi bir kod içerebilir 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
Bir çağrı ALERT_IF2 tüm işlevlerini gerçekleştirebilir printf bu konunun başındaki kod:
ALERT_IF2(someVar > MAX_SOMEVAR, "OVERFLOW! In NameOfThisFunc( ),
someVar=%d, otherVar=%d.\n", someVar, otherVar );
Özel bir makro daha az bilgi (ne daha uygun olduğuna bağlı olarak) farklı hedeflere bildirmek için kolayca değiştirilebilir çünkü hata ayıklama gereksinimlerinizi geliştikçe bu yaklaşım özellikle yararlı olabilir.