Aracılığıyla paylaş


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.

Ayrıca bkz.

Diğer Kaynaklar

CRT Hata Ayıklama Teknikleri