Makroları bildirdiği için
Kullanabileceğiniz _RPTn, ve _RPTFn crtdbg içinde tanımlı makrolar.Kullanımını değiştir h, printf deyimleri hata ayıklama. Bu makroları otomatik olarak sizin sürümünde kaybolur, yapı _debug nedenle bunları içine gerek yoktur, tanımlı değil #ifdefs.
Makro |
İşlev |
---|---|
_RPT0, _RPT1, _RPT2, _RPT3, _RPT4 |
İleti dize ve dört bağımsız sıfıra dönüştürür. İçin _RPT1 - _RPT4, ileti dize gören bir printf-dize bağımsız değişkenler için biçimlendirme stili. |
_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ı kullanabilirsiniz _RPTF2 bu aynı değerleri 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 farkederseniz, özellikle kendi gereksinimlerinize uyacak şekilde tasarlanmış bir makro yazabilirsiniz. Bir üstbilgi dosyaları, örneğin, 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 kodu:
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 güncellenmektedir bu yaklaşım özellikle yararlı olabilir.