Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir ifadeyi değerlendirin ve sonuç false olduğunda bir hata ayıklama raporu oluşturun (yalnızca hata ayıklama sürümü).
Sözdizimi
// Typical usage:
_ASSERT_EXPR( booleanExpression, message );
_ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
Parametreler
booleanExpression
Sıfır olmayan () veya 0true ( olarak değerlendirilen bir skaler ifade (falseişaretçi ifadeleri dahil).
message
Raporun bir parçası olarak görüntülenecek geniş bir dize.
Açıklamalar
_ASSERT_EXPRve _ASSERT makroları, _ASSERTE bir uygulamaya hata ayıklama işlemi sırasında varsayımları denetlemek için temiz ve basit bir mekanizma sağlar. Esnektirler çünkü bir uygulamanın perakende derlemesinde #ifdef çağrılmalarını önlemek için deyimlerin içine alınmaları gerekmez. Bu esneklik, makro kullanılarak _DEBUG elde edilir.
_ASSERT_EXPR
_ASSERT ve _ASSERTE yalnızca derleme zamanında tanımlandığında _DEBUG kullanılabilir. Tanımlanmadığında _DEBUG , bu makrolara yapılan çağrılar ön işleme sırasında kaldırılır.
_ASSERT_EXPR
_ASSERT ve _ASSERTE bağımsız değişkenlerini booleanExpression değerlendirir ve sonuç (0) olduğunda false bir tanılama iletisi yazdırır ve hata ayıklama raporu oluşturmak için çağrısı _CrtDbgReportW yaparlar. Makro _ASSERT basit bir tanılama iletisi yazdırır, _ASSERTE iletideki başarısız ifadenin dize gösterimini içerir ve _ASSERT_EXPR dizeyi message tanılama iletisine ekler. Bu makrolar sıfır olmayan olarak değerlendirildiğinde booleanExpression hiçbir şey yapmaz.
_ASSERT_EXPR
_ASSERT ve _ASSERTE çağırarak _CrtDbgReportWtüm çıkışın geniş karakterlerde olmasını sağlayın.
_ASSERTE içinde booleanExpression Unicode karakterlerini düzgün yazdırır ve _ASSERT_EXPR içindeki Unicode karakterlerini yazdırır message.
_ASSERTE Makro başarısız ifadeyi belirttiğinden ve _ASSERT_EXPR oluşturulan raporda bir ileti belirtmenize olanak sağladığından, kullanıcıların uygulama kaynak koduna başvurmadan sorunu tanımlamasına olanak tanır. Ancak, tarafından yazdırılan message ve tarafından değerlendirilen _ASSERT_EXPR her _ASSERTE ifadenin uygulamanızın çıkış (hata ayıklama sürümü) dosyasına dize sabiti olarak eklenmesinin bir dezavantajı vardır. Bu nedenle, veya _ASSERT_EXPRöğesine çok sayıda çağrı yapılırsa_ASSERTE, bu ifadeler çıkış dosyanızın boyutunu büyük ölçüde artırabilir.
ve _CrtSetReportMode işlevleriyle _CrtSetReportFile aksini belirtmediğiniz sürece, iletiler aşağıdaki ayarlara eşdeğer bir açılır iletişim kutusunda görünür:
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);
_CrtDbgReportW hata ayıklama raporunu oluşturur ve geçerli rapor moduna veya rapor türü için tanımlanan modlara ve dosyaya _CRT_ASSERT göre hedefini veya hedeflerini belirler. Varsayılan olarak, onay hataları ve hataları bir hata ayıklama iletisi penceresine yönlendirilir.
_CrtSetReportMode ve _CrtSetReportFile işlevleri, her rapor türünün hedeflerini tanımlamak için kullanılır.
Hedef bir hata ayıklama iletisi penceresi olduğunda ve kullanıcı Yeniden Dene düğmesini seçtiğinde 1 döndürür ve _CrtDbgReportW tam zamanında (JIT) hata ayıklama etkinse makroların hata ayıklayıcıyı başlatmasına neden _ASSERT_EXPR_ASSERT_ASSERTE olur.
Raporlama işlemi hakkında daha fazla bilgi için, işlevine _CrtDbgReport_CrtDbgReportW bakın. Onay hatalarını çözme ve bu makroları hata ayıklama hata işleme mekanizması olarak kullanma hakkında daha fazla bilgi için bkz . Raporlama için makrolar.
Makrolara _ASSERT ek olarak, assert makro program mantığını doğrulamak için kullanılabilir. Bu makro, kitaplıkların hem hata ayıklama hem de sürüm sürümlerinde kullanılabilir.
_RPThata _RPTF ayıklama makroları, hata ayıklama raporu oluşturmak için de kullanılabilir, ancak bir ifadeyi değerlendirmez. Makrolar _RPT basit bir rapor oluşturur. Makrolar, _RPTF rapor makrosunun oluşturulan raporda çağrıldığı kaynak dosyayı ve satır numarasını içerir. Bu makroların geniş karakter sürümleri kullanılabilir (_RPTW, _RPTFW). Geniş karakter sürümleri, tüm dize parametreleri ve çıkışı için geniş karakter dizelerinin kullanılması dışında dar karakter sürümleriyle aynıdır.
ve _ASSERT_EXPR_ASSERT makrolar olsa da ve dahil _ASSERTEederek kullanılabilir olsa <crtdbg.h>da, bu makrolar diğer çalışma zamanı işlevlerini çağırdığından uygulama tanımlandığında _DEBUG C çalışma zamanı kitaplığının hata ayıklama sürümüyle bağlantı oluşturmalıdır.
Gereksinimler
| Makro | Gerekli başlık |
|---|---|
_ASSERT_EXPR, _ASSERT, _ASSERTE |
<crtdbg.h> |
Örnek
Bu programda, koşulunu _ASSERT_ASSERTEtest etmek için ve string1 == string2 makrolarına çağrılar yapılır. Koşul başarısız olursa, bu makrolar bir tanılama iletisi yazdırır. ve _RPT_RPTF makro grubu da bu programda işleve printf alternatif olarak kullanılır.
// 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;
}
Use the assert macros to evaluate the expression p1 == p2.
crt_ASSERT_macro.c(54) :
Will _ASSERT find 'I am p1' == 'I am p2' ?
crt_ASSERT_macro.c(55) : Assertion failed!
crt_ASSERT_macro.c(58) :
Will _ASSERTE find 'I am p1' == 'I am p2' ?
crt_ASSERT_macro.c(59) : Assertion failed: p1 == p2
'I am p1' != 'I am p2'
Ayrıca bkz.
Hata ayıklama yordamları
assert Makro, _assert, _wassert
_RPT, _RPTF, _RPTW, _RPTFW Makrolar