_ASSERT, _ASSERTE makra
Vyhodnotí výraz a generovat sestavu ladění, pokud je výsledek False (pouze ladicí verze).
_ASSERT(
booleanExpression
);
_ASSERTE(
booleanExpression
);
Parametry
- booleanExpression
Výraz (včetně ukazatelů), který je vyhodnocen jako nenulová nebo 0.
Poznámky
_ASSERT a _ASSERTE makra poskytnout čistý a jednoduchý mechanismus pro kontrolu předpokladů během ladění aplikace.Že jsou velmi flexibilní, protože nemusí být uzavřeny v #ifdef nazývá výkazy a zabránit jim v prodejní sestavení aplikace.Tato pružnost je dosaženo použitím _DEBUG makro._ASSERTa _ASSERTE jsou k dispozici pouze při _DEBUG je definován.Při _DEBUG je volání makra, nejsou definovány, budou odebrány při úpravě před zpracováním.
_ASSERTa _ASSERTE vyhodnotit jejich booleanExpression argument, a pokud je výsledek false (0), tisk diagnostické zprávy a volání _CrtDbgReportW ke generování sestavy ladění._ASSERT Makro vytiskne jednoduchých diagnostických zpráv, zatímco _ASSERTE zahrnuje zprávy řetězcové vyjádření výrazu se nezdařilo.Tato makra neprovádějte žádnou akci při booleanExpression vyhodnocen jako nenulová.
_ASSERTa _ASSERTE vyvolat _CrtDbgReportW, což způsobuje, že veškerý výstup v široké znaky a _ASSERTE vytiskne správně znaky Unicode v booleanExpression.
Protože _ASSERTE makro Určuje výraz selhání vygenerované sestavy, umožňuje uživatelům identifikovat problém bez odkazující na zdrojový kód aplikace.Nevýhodou však existuje, že každý výraz vyhodnocen _ASSERTE je zahrnuta ve výstupním souboru (ladicí verze), aplikace jako řetězcová konstanta.Proto pokud velký počet volání _ASSERTE, tyto výrazy může výrazně zvětšit velikost výstupního souboru.
Pokud jste se _CrtSetReportMode a _CrtSetReportFile funkce zprávy se zobrazí v místní dialogové ekvivalentní nastavení:
_CrtSetReportMode(CRT_ASSERT, _CRTDBG_MODE_WNDW);
_CrtDbgReportnebo _CrtDbgReportW generuje sestavu ladění a určuje jeho cíl nebo cíle, na základě aktuální sestavy režim nebo režimy a definované pro soubor _CRT_ASSERT typ sestavy.Ve výchozím výrazu selhání a chyb přesměrováni na okno zprávy ladění._CrtSetReportMode a _CrtSetReportFile funkce se používají k definování cílů pro každý typ sestavy.
Kdy cíl je okno zprávy ladění a uživatel klepne Opakovat tlačítko, _CrtDbgReport nebo _CrtDbgReportW vrátí hodnotu 1, způsobuje _ASSERT a _ASSERTE makra pro spuštění ladicího programu, za předpokladu, že je povoleno ladění just-in-time (JIT).
Další informace o procesu vykazování naleznete _CrtDbgReport, _CrtDbgReportW funkce.Další informace o řešení selhání výrazu a použití těchto maker jako ladění chyb zpracování mechanismus naleznete Použití makra pro ověření a hlášení.
_RPT, _RPTF ladění makra jsou také k dispozici pro generování sestavy ladění, ale jejich výraz nelze vyhodnotit._RPT Makra generovat jednoduché sestavy._RPTF Makra zahrnout soubor a řádek číslo zdroje kde byla volána makra sestavy generované sestavy.Kromě _ASSERTE makra ANSI výrazu rutina lze použít k ověření programu logiku.Tato rutina je k dispozici v debug a release verze knihoven.Jsou k dispozici verze znaků tato makra (_RPTWn, _RPTFWn).Verze znaků jsou shodné s úzkými znaky verze s výjimkou, že řetězce znaků, které se používají pro všechny parametry řetězce a výstup.
Přestože _ASSERT a _ASSERTE jsou makra a jsou získány zahrnutím Crtdbg.h aplikace musí propojit s jedním z následujících knihoven protože tato makra volání jiných funkcí runtime.
Libcmtd.lib
Multithread statické knihovny ladicí verze.Msvcrtd.lib
Importovat knihovnu pro Msvcr90d.dll ladicí verze.
Požadavky
Makro |
Požadované záhlaví |
---|---|
_ASSERT |
<crtdbg.h> |
_ASSERTE |
<crtdbg.h> |
Příklad
V tomto programu volání _ASSERT a _ASSERTE makra testování podmínky string1 == string2.Pokud podmínka, tisk těchto maker diagnostické zprávy._RPTn a _RPTFn skupinu maker rovněž vykonávána v tomto programu jako alternativu k printf funkce.
// 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;
}
Ekvivalent v rozhraní .NET Framework
System::Diagnostics::Debug:: výrazu