Share via


_ASSERT, _ASSERTE Makros

Werten Sie einen Ausdruck aus und generieren Sie ein Debugbericht, wenn das Ergebnis False (nur Debugversion) ist.

_ASSERT( 
   booleanExpression 
);
_ASSERTE( 
   booleanExpression 
);

Parameter

  • booleanExpression
    Ausdruck (einschließlich Zeiger) bis der Wert ungleich 0 oder 0 ergibt.

Hinweise

Die _ASSERT und _ASSERTE Makros bieten eine Anwendung mit einem bereinigten und einfachen Mechanismus zum Überprüfen von Annahmen während des Debuggens Prozesses.Es ist sehr flexibel, da es nicht erforderlich ist, in #ifdef-Anweisungen eingeschlossen werden, um sie in einem Verkaufsversionsbuild einer Anwendung aufgerufen werden kann.Diese Flexibilität wird erreicht, indem das _DEBUG Makro verwendet._ASSERT und _ASSERTE sind nur verfügbar, wenn _DEBUG definiert ist.Wenn _DEBUG nicht definiert wird, werden Aufrufe dieser Makros während des Präprozessorlaufs entfernt.

_ASSERT und ihre Werte _ASSERTE-Argument booleanExpression fehl, wenn das Ergebnis false (0) ist, drucken sie eine Diagnosemeldung, und rufen _CrtDbgReportW auf, um ein Debugbericht generiert wird.Das _ASSERT Makro gibt eine einfache Diagnosemeldung, während _ASSERTE eine Zeichenfolgendarstellung des fehlgeschlagenen Ausdrucks in der Nachricht enthält.Diese Makros gehen keine Auswirkungen, wenn booleanExpression als ungleich 0 ausgewertet werden.

_ASSERT und _ASSERTE Aufruf _CrtDbgReportW, der bewirkt, dass die gesamte Ausgabe in Breitzeichen sein, und _ASSERTE ordnungsgemäß Unicode-Zeichen in booleanExpressionausgegeben.

Da das Makro _ASSERTE den fehlgeschlagenen Ausdruck im generierten Bericht anzeigt, ermöglicht es Benutzern, um das Problem zu identifizieren, ohne den Quellcode der Anwendung verwiesen wird.Ein Nachteil besteht jedoch darin, dass jeder Ausdruck, der ausgewertet wird, um _ASSERTE in der Ausgabe (Debugversion) der Anwendung als Zeichenfolgenkonstante eingeschlossen wird.Wenn _ASSERTEviele Aufrufe ausgeführt werden, können diese Ausdrücke die Größe der Ausgabedatei erheblich erhöhen.

Wenn nicht anders mit den _CrtSetReportMode und _CrtSetReportFile-Funktionen angeben, werden Meldungen in einer Popup-Dialogfeld äquivalent zum Festlegen:

_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);

_CrtDbgReport Debugbericht generiert den _CrtDbgReportW oder ihr Ziel oder die Ziele und bestimmt anhand des aktuellen Berichts oder Modi der Modus und die Datei, die für den _CRT_ASSERT-Typ des Berichts definiert sind.Standardmäßig werden Assertionsfehler und Fehler für eine Debug- Meldungsfenster verwiesen.Die _CrtSetReportMode und _CrtSetReportFile-Funktionen werden verwendet, um die Ziele für jeden Typ für Berichte zu definieren.

Wenn das Ziel eine Debug- und Meldungsfenster Wiederholen der Benutzer auf die Schaltfläche klickt, gibt _CrtDbgReport oder _CrtDbgReportW 1 zurück und veranlasst die _ASSERT und _ASSERTE Makros, den Debugger zu starten, vorausgesetzt, dass rechtzeitiges Debuggen (Just-In-Time) aktiviert ist.

Weitere Informationen zu den Berichten Prozess finden Sie in der _CrtDbgReport, _CrtDbgReportW-Funktion.Weitere Informationen zum Beheben von Assertionsfehlern und Verwenden dieser Makros als Mechanismus für fehlerbehandlungs Debuggen finden Sie unter Verwenden von Makros zum Überprüfen und Berichterstellung.

Die Debuggen von Makros _RPT, _RPTF sind auch zum Generieren eines Debugberichts Werten verfügbar, jedoch keinen Ausdruck aus.Die _RPT Makros generieren einen einfachen Bericht.Die _RPTF Makros enthalten die Quelldatei sowie die Zeilennummer, in der das Makro Berichts im generierten Bericht aufgerufen wurde.Zusätzlich zu den _ASSERTE Makros kann die Routine ANSI Assert verwendet werden, um Programmlogik zu überprüfen.Diese Routine ist sowohl in der Debug- als auch in der Releaseversion Bibliotheken verfügbar.Breitzeichen Versionen dieser Makros sind verfügbar,_RPTWn( _RPTFWn).Die Breitzeichen Versionen sind schmalen Zeichen Versionen identisch, mit der Ausnahme, dass Zeichenfolgen mit Breitzeichen werden für alle Zeichenfolgenparameter verwendet und ausgegeben.

Obwohl _ASSERT und _ASSERTE Makros sind und erhalten werden, indem Crtdbg.h enthält, muss die Anwendung mit einer der folgenden Bibliotheken verknüpfen, da diese Makros andere Laufzeitfunktionen aufrufen.

  • Libcmtd.lib
    Binden von statische Bibliothek, Debugversion.

  • Msvcrtd.lib
    Importbibliothek für Msvcr90d.dll, Debugversion.

Anforderungen

Makro

Erforderlicher Header

_ASSERT

<crtdbg.h>

_ASSERTE

<crtdbg.h>

Beispiel

In diesem Programm werden Aufrufe der _ASSERT und _ASSERTE Makros, um die Bedingung string1 == string2zu testen.Wenn die Bedingung fehlschlägt, Diagnosemeldung eine diese Makros ausgegeben.Die _RPTn und _RPTFn Gruppe von Makros wird auch in diesem Programm als Alternative zur printf-Funktion ausgeführt.

// 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-Entsprechung

System::Diagnose::Debuggen::Assert

Siehe auch

Referenz

Debug- Routinen

_RPT, _RPTF, _RPTW, _RPTFW Makros