Udostępnij za pośrednictwem


_ASSERT, _ASSERTE — Makra

Ocenia wyrażenia i Generowanie raportu debugowania, gdy wynik jest False (tylko wersja debugowania).

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parametry

  • booleanExpression
    Wyrażenie (w tym wskaźników) ma wartość różną od zera lub równa zero.

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 w kompilacji detalicznych aplikacji o nazwie instrukcji, aby uchronić ich przed.Elastyczność ta osiąga się za pomocą _DEBUG makro._ASSERTi _ASSERTE są dostępne tylko po _DEBUG jest zdefiniowana.Gdy _DEBUG jest niezdefiniowana, wywołania tych makr są usuwane podczas przetwarzania wstępnego.

_ASSERTi _ASSERTE oceny ich booleanExpression argument, a wynik jest false (0), drukują komunikat diagnostyczny i wywołanie _CrtDbgReportW do generowania raportu debugowania._ASSERT Makro drukuje prosty komunikat diagnostyczny, podczas gdy _ASSERTE zawiera reprezentację ciąg wyrażenia nie powiodło się w komunikacie.Nic nie rób tych makr po booleanExpression ma wartość różną od zera.

_ASSERTi _ASSERTE wywołać _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, użytkownicy mogą zidentyfikować problem bez odnoszące się do kodu źródłowego aplikacji.Jednak wadą istnieje w tym każdy wyrażenie oceniane przez _ASSERTE znajduje się w pliku wyjściowym (wersja do debugowania) aplikacji jako ciąg stała.W związku z tym, jeśli dużej liczby wywołań do _ASSERTE, tych wyrażeń może znacznie zwiększyć rozmiar pliku wyjściowego.

Jeśli użytkownik nie określi inaczej z _CrtSetReportMode i _CrtSetReportFile funkcje, wiadomości są wyświetlane w oknie dialogowym wyskakującego równoważne ustawienie:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReportlub _CrtDbgReportW generuje raport debugowania i określa jego miejsce docelowe lub miejsc, w oparciu o bieżący tryb raportu lub tryby i plik zdefiniowane dla _CRT_ASSERT typ raportu.Domyślnie potwierdzenia awarii i błędów są skierowane do okna komunikatów debugowania._CrtSetReportMode i _CrtSetReportFile funkcje służą do definiowania miejsc docelowych dla każdego typu raportu.

Kiedy miejsce docelowe znajduje się w oknie wiadomości debugowania i użytkownik kliknie ponowić próbę button, _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 na temat procesu raportowania, zobacz _CrtDbgReport, _CrtDbgReportW funkcji.Aby uzyskać więcej informacji o rozwiązywaniu błędów potwierdzenia i przy użyciu tych makr jako błąd debugowania mechanizmu obsługi, zobacz Przy użyciu makr dla weryfikacji i raportowanie.

_RPT, _RPTF makra debugowania są również dostępne do generowania raportu debugowania, ale one nie oszacować wyrażenia._RPT Makra wygenerować raport prosty._RPTF Makra dołączyć plik i linia numer źródła gdzie wywołania makra raportu wygenerowany raport.W uzupełnieniu do _ASSERTE makra, ANSI dochodzić rutynowych może służyć do sprawdzenia logiki programu.Procedura ta jest dostępna w debug i release wersji bibliotek.Znak dwubajtowy wersje te makra są dostępne (_RPTWn, _RPTFWn).Wersje znak dwubajtowy są identyczne do wersji znaki wąskie, chyba że znak dwubajtowy ciągi są używane dla wszystkich parametrów ciągu i dane wyjściowe.

Chociaż _ASSERT i _ASSERTE są makra i są uzyskiwane w tym Crtdbg.h, aplikacji należy połączyć z jednym z następujących bibliotek ponieważ inne funkcje wykonywania wywołania tych makr.

  • Libcmtd.lib
    Wielowątkowe biblioteka statyczna wersji debug.

  • Msvcrtd.lib
    Importowanie biblioteki dla Msvcr90d.dll wersji programu debug.

Wymagania

Makro

Wymagany nagłówek

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

Przykład

W tym programie wywołań do _ASSERT i _ASSERTE makra do testowania warunku string1 == string2.Jeśli warunek nie powiedzie się, te makra wypisuje komunikat diagnostyczny._RPTn i _RPTFn grupy makr jest wykonywane również 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::Assert

Zobacz też

Informacje

Procedury debugowania

_RPT, _RPTF, _RPTW, _RPTFW — Makra