Aracılığıyla paylaş


_assert, _asserte makrolar

Bir ifade değerlendirmek ve sonucu olduğunda bir hata ayıklama raporu oluşturmak False (yalnızca hata ayıklama sürümü).

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parametreler

  • booleanExpression
    İfade (işaretçiler dahil), sıfır olmayan veya 0 olarak değerlendirir.

Notlar

_ASSERT Ve _ASSERTE makrolar varsayımlar denetimi hata ayıklama işlemi sırasında temiz ve basit bir mekanizma ile bir uygulama sağlar. İçine alınması gerekmez çünkü bunlar çok esnek #ifdef bunları önlemek için ifadeleri adlı bir uygulama perakende yapısında. Bu esneklik kullanılarak elde _debug makro. _ASSERTve _ASSERTE yalnızca ne zaman kullanılabilir _DEBUG tanımlanır. Zaman _DEBUG olan tanımlı değil, bu makroları aramaları ön-işleme sırasında kaldırılır.

_ASSERTve _ASSERTE değerlendirmek kendi booleanExpression bağımsız değişkeni ve sonuç olduğunda false (0) tanılama iletisini ve çağrı yazdırma _CrtDbgReportW hata ayıklama rapor oluşturmak için. _ASSERT Makro basit bir tanılama iletisi yazdırır iken _ASSERTE iletide başarısız ifade dize halinde temsilini içerir. Bu makroları hiçbir şey yapma, booleanExpression için sıfır olmayan bir değer olarak değerlendirilir.

_ASSERTve _ASSERTE çağırmak _CrtDbgReportW, neden geniş karakter olması tüm çıktı ve _ASSERTE Unicode karakterleri düzgün yazdırılmasını booleanExpression.

Çünkü _ASSERTE makro, oluşturulan rapora başarısız ifade belirtir, kullanıcıların uygulama kaynak kodu için başvuruda bulunmadan sorunun tanımlanmasına olanak tanır. Her deyim tarafından değerlendirilir, ancak bir dezavantajı var _ASSERTE dize sabiti olarak uygulamanızın çıktı (hata ayıklama sürümü) dosyasında bulunur. Bu nedenle, çok sayıda çağrı yapılır _ASSERTE, bu ifadeler çıktı dosyasının boyutunu önemli ölçüde artırabilir.

İle aksini belirtmediğiniz sürece _CrtSetReportMode ve _CrtSetReportFile işlevleri, iletileri ayarı için eşdeğer bir açılan iletişim kutusu görüntülenir:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReportveya _CrtDbgReportW hata ayıklama raporu oluşturur ve onun hedef veya geçerli rapor modu veya modları ve dosya için tanımlanan temel hedefler belirler _CRT_ASSERT rapor türü. Varsayılan olarak, bir hata ayıklama iletisi penceresi onaylama hataları ve hataların yönlendirilir. _CrtSetReportMode ve _CrtSetReportFile işlevleri, her rapor türü için hedefleri tanımlamak için kullanılır.

Hedef bir hata ayıklama iletisi penceresi ve kullanıcı olduğunda tıklattığında yeniden düğmesi, _CrtDbgReport veya _CrtDbgReportW 1 döndürür neden _ASSERT ve _ASSERTE just-in-time (JIT) hata ayıklama etkin koşuluyla hata ayıklayıcısını başlatma makrolar.

Raporlama işlemi hakkında daha fazla bilgi için bkz: _CrtDbgReport, _CrtDbgReportW işlevi. Onaylama işlemi hataları çözme ve bir hata ayıklama hata işleme mekanizması olarak bu makroları kullanma hakkında daha fazla bilgi için bkz: Makro kullanarak doğrulama ve raporlama için.

_rpt, _rptf hata ayıklama makroları da hata ayıklama raporu oluşturmak için kullanılabilir, ancak ifade değerlendirmek değil. _RPT Makrolar basit bir rapor oluşturur. _RPTF Makrolar rapor makro yere çağrıldı kaynak dosyası ve satır numarası oluşturulan rapora dahil. Ek olarak _ASSERTE makrolar, ANSI onaylama yordamı program mantığı doğrulamak için kullanılabilir. Bu yordamı her iki hata ayıklama ve yayın kitaplıklarının sürümlerini kullanılabilir. Bu makroları geniş karakter sürümleri yüklenebilir (_RPTWn, _RPTFWn). Geniş karakter sürümleri, dar karakter sürümleriyle aynı geniş karakter dizeleri tüm dize parametreleri ve çıkış için kullanılan içindir.

Ancak _ASSERT ve _ASSERTE makrolar ve elde edilen bu makroları çalıştırma levler çağırması nedeniyle Crtdbg.h dahil olmak üzere, uygulama aşağıdaki kitaplıklardan biri ile bağlanmanız gerekir.

  • Libcmtd.lib
    Multithread statik kitaplığı, hata ayıklama sürümü.

  • Msvcrtd.lib
    Kitaplık Msvcr90d.dll, hata ayıklama sürümünü alın.

Gereksinimler

Makro

Gerekli başlık

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

Örnek

Bu programda çağrıları için yapılan _ASSERT ve _ASSERTE koşulu test etmek için makroları string1 == string2. Koşul başarısız olursa, bu makroları tanılama iletisini yazdır. _RPTn Ve _RPTFn makrolar grubunuzun da kullandı bu programda, alternatif olarak printf işlevi.

// crt_ASSERT_macro.c
// compile with: /D_DEBUG /MTd /Od /Zi /link /verbose:lib /debug
//
// This program uses the _ASSERT and _ASSERTE debugging macros.
//

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

int main()
{
   char *p1, *p2;

   // The Reporting Mode and File must be specified
   // before generating a debug report via an assert
   // or report macro.
   // This program sends all report types to STDOUT.
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);

   // Allocate and assign the pointer variables.
   p1 = (char *)malloc(10);
   strcpy_s(p1, 10, "I am p1");
   p2 = (char *)malloc(10);
   strcpy_s(p2, 10, "I am p2");

   // Use the report macros as a debugging
   // warning mechanism, similar to printf.
   // Use the assert macros to check if the 
   // p1 and p2 variables are equivalent.
   // If the expression fails, _ASSERTE will
   // include a string representation of the
   // failed expression in the report.
   // _ASSERT does not include the
   // expression in the generated report.
   _RPT0(_CRT_WARN,
       "Use the assert macros to evaluate the expression p1 == p2.\n");
   _RPTF2(_CRT_WARN, "\n Will _ASSERT find '%s' == '%s' ?\n", p1, p2);
   _ASSERT(p1 == p2);

   _RPTF2(_CRT_WARN, "\n\n Will _ASSERTE find '%s' == '%s' ?\n",
          p1, p2);
   _ASSERTE(p1 == p2);

   _RPT2(_CRT_ERROR, "'%s' != '%s'\n", p1, p2);

   free(p2);
   free(p1);

   return 0;
}
            

.NET Framework Eşdeğeri

System::Diagnostics::Debug:: onaylama

Ayrıca bkz.

Başvuru

Yordamlar hata ayıklama

_rpt, _rptf, _rptw, _rptfw makrolar