_ASSERT, _ASSERTE makr
Ocenia wyrażenia i wygenerować raport debugowania, gdy wynik jest False (tylko wersja debugowania).
_ASSERT(
booleanExpression
);
_ASSERTE(
booleanExpression
);
Parametry
- booleanExpression
Wyrażenie (w tym wskaźników), którego wynikiem jest różna od zera lub 0.
Uwagi
_ASSERT i _ASSERTE makra dostarczają prosty i mechanizm sprawdzania założeń podczas debugowania aplikacji.Są one bardzo elastyczne, ponieważ nie muszą być ujęte w #ifdef instrukcji, aby zapobiec jest wywoływana w Kompilacja detaliczna aplikacji.Elastyczność ta uzyskuje się za pomocą _DEBUG makro._ASSERTi _ASSERTE są dostępne tylko podczas _DEBUG jest zdefiniowany.Gdy _DEBUG jest niezdefiniowana, wywołania tych makr są usuwane podczas wstępnego przetwarzania.
_ASSERTi _ASSERTE oceny ich booleanExpression argument, a wynik jest false (0), są drukowane wiadomości diagnostycznych i wywołanie _CrtDbgReportW do generowania raportu debugowania._ASSERT Makro drukuje proste wiadomości diagnostycznych, podczas gdy _ASSERTE obejmuje reprezentację ciągu nie powiodło się wyrażenie w wiadomości.Te makra nie robić nic, gdy booleanExpression wynikiem jest różna od zera.
_ASSERTi _ASSERTE wywołania _CrtDbgReportW, co powoduje, że wszystkie dane wyjściowe w szerokości znaków i _ASSERTE poprawnie drukuje znaki Unicode w booleanExpression.
Ponieważ _ASSERTE makro określa wyrażenie nie powiodło się w wygenerowany raport, umożliwia użytkownikom w zidentyfikowaniu problemu, bez odwoływania się do kodu źródłowego aplikacji.Wadą istnieje jednak w każdym wyrażenie jest sprawdzane przez _ASSERTE znajduje się w pliku wyjściowym (wersja do debugowania) w aplikacji jako stała znakowa.W związku z tym, jeśli duża liczba wywołania są wykonywane na _ASSERTE, tych określeń może znacznie zwiększyć rozmiar pliku wyjściowego.
O ile nie określono inaczej z _CrtSetReportMode i _CrtSetReportFile funkcje, wiadomości są wyświetlane w wyskakujących oknach dialogowych równoważne ustawienie:
_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);
_CrtDbgReportlub _CrtDbgReportW generuje raport debugowania i określa jego przeznaczenia lub miejsca przeznaczenia, na podstawie bieżącego trybu raportu lub trybów i określone dla pliku _CRT_ASSERT typ raportu.Domyślnie potwierdzenia błędy i błędy są kierowane do okna komunikatu debugowania._CrtSetReportMode i _CrtSetReportFile funkcje służą do definiowania miejsc docelowych dla każdego typu raportu.
Gdy miejsce docelowe znajduje się okno komunikatu debugowania i użytkownik kliknie ponawiania próby przycisku, _CrtDbgReport lub _CrtDbgReportW zwraca wartość 1, powodując _ASSERT i _ASSERTE makra, aby uruchomić narzędzie debugger, pod warunkiem, że jest włączone debugowanie just-in-time (JIT).
Aby uzyskać więcej informacji o procesie raportowania, zobacz _CrtDbgReport, _CrtDbgReportW funkcji.Aby uzyskać więcej informacji o rozwiązywaniu błędów potwierdzenia i przy użyciu tych makr jako mechanizmu obsługi błędów debugowania, zobacz Za pomocą makra dla weryfikacji i sprawozdawczości.
_RPT, _RPTF makra debugowania są również dostępne dla generowania raportu debugowania, ale one nie ocenia wyrażenia._RPT Makra wygenerować raport prosty._RPTF Makr umożliwia uwzględnienie w raporcie wygenerowanym gdzie makra raport został wywołany numer pliku i wiersza źródła.Oprócz _ASSERTE makra, ANSI assert rutynowych mogą służyć do weryfikacji logiki programu.Procedura ta jest dostępna w debug i release wersji bibliotek.Dostępne są wersje szerokich znaków tych makr (_RPTWn, _RPTFWn).Wersje szerokich znaków są identyczne jak w przypadku wersji znaki wąskie, z wyjątkiem, że ciągi znaków szerokości są używane dla wszystkich ciąg parametrów i danych wyjściowych.
Chociaż _ASSERT i _ASSERTE są makra i są uzyskiwane przez łącznie z Crtdbg.h, aplikacja musi połączyć z jednym z następujących bibliotek, ponieważ te makra wywoływać inne funkcje run-time.
LibCMtD.lib
Wielowątkowym biblioteka statyczna wersja do debugowania.MSVCRtD.lib
Importowanie biblioteki dla Msvcr90d.dll, wersja do debugowania.
Wymagania
Makro |
Wymaganego nagłówka |
---|---|
_ASSERT |
<crtdbg.h> |
_ASSERTE |
<crtdbg.h> |
Przykład
W tym programie, wywołania są wykonywane na _ASSERT i _ASSERTE makr do testowania warunku string1 == string2.Jeśli warunek nie powiedzie się, te makra drukowania komunikat diagnostyczny._RPTn i _RPTFn grupy makr jest również wykonywane w tym programie, jako alternatywa dla printf funkcji.
// 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;
}
Odpowiednik w programie .NET Framework
System::Diagnostics::Debug:: potwierdzenia