_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