Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Értékelje ki a kifejezést, és hozzon létre hibakeresési jelentést, ha az eredmény ( false csak a hibakeresési verzió).
Szemantika
// Typical usage:
_ASSERT_EXPR( booleanExpression, message );
_ASSERT( booleanExpression );
_ASSERTE( booleanExpression );
Paraméterek
booleanExpression
Skaláris kifejezés (beleértve a mutatókifejezéseket is), amely a nemzero (true) vagy a 0 (false) értéket értékeli ki.
message
A jelentés részeként megjelenítendő széles sztring.
Megjegyzések
A _ASSERT_EXPR, _ASSERT és _ASSERTE a makrók egy tiszta és egyszerű mechanizmust biztosítanak az alkalmazások számára a feltételezések hibakeresési folyamat során történő ellenőrzéséhez. Rugalmasak, mert nem kell az utasításokat beszedni #ifdef , hogy megakadályozzák, hogy egy alkalmazás kiskereskedelmi buildjében meghívják őket. Ez a rugalmasság a _DEBUG makró használatával érhető el.
_ASSERT_EXPR, _ASSERT és _ASSERTE csak akkor érhetők el, ha _DEBUG a fordítási időpontban van definiálva. Ha _DEBUG nincs definiálva, az előfeldolgozás során ezekre a makrókra irányuló hívások törlődnek.
_ASSERT_EXPR, _ASSERT és _ASSERTE kiértékeli az argumentumukat booleanExpression , és ha az eredmény (0) lesz false , diagnosztikai üzenetet nyomtatnak ki, és felhívják _CrtDbgReportW a hibakeresési jelentés létrehozására. A _ASSERT makró egy egyszerű diagnosztikai üzenetet nyomtat ki, _ASSERTE a sikertelen kifejezés sztring-ábrázolását tartalmazza az üzenetben, és _ASSERT_EXPR tartalmazza a message sztringet a diagnosztikai üzenetben. Ezek a makrók nem tesznek semmit, ha booleanExpression nem aero értékre értékelik őket.
_ASSERT_EXPR, _ASSERT és _ASSERTE meghívja _CrtDbgReportW, ami miatt az összes kimenet széles karakterekkel jelenik meg.
_ASSERTE megfelelően nyomtatja ki a Unicode-karaktereket, booleanExpression és _ASSERT_EXPR Unicode-karaktereket nyomtat ki a fájlban message.
Mivel a _ASSERTE makró megadja a sikertelen kifejezést, és _ASSERT_EXPR lehetővé teszi egy üzenet megadását a létrehozott jelentésben, lehetővé teszik a felhasználók számára a probléma azonosítását anélkül, hogy az alkalmazás forráskódjára hivatkoznának. Hátránya azonban az, hogy minden message kinyomtatott _ASSERT_EXPR és kiértékelt _ASSERTE kifejezés sztringállandóként szerepel az alkalmazás kimeneti (hibakeresési) fájljában. Ezért, ha nagy számú hívás történik _ASSERT_EXPR_ASSERTEvagy , ezek a kifejezések jelentősen növelhetik a kimeneti fájl méretét.
Ha másként nem adja meg a függvényeket és _CrtSetReportFile a _CrtSetReportMode függvényeket, az üzenetek a beállításnak megfelelő előugró párbeszédpanelen jelennek meg:
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_WNDW);
_CrtDbgReportW létrehozza a hibakeresési jelentést, és meghatározza a célhelyet vagy célhelyet a jelentéstípushoz _CRT_ASSERT definiált jelenlegi jelentésmód vagy módok és fájlok alapján. Alapértelmezés szerint az érvényesítési hibák és hibák egy hibakeresési üzenetablakba lesznek irányítva. Az _CrtSetReportMode egyes jelentéstípusok célhelyeit a függvények és _CrtSetReportFile a függvények határozzák meg.
Ha a cél egy hibakeresési üzenetablak, és a felhasználó az Újrapróbálkozás gombot választja, _CrtDbgReportW az 1 értéket adja vissza, és a _ASSERT_EXPR_ASSERT_ASSERTE makrók elindítják a hibakeresőt, ha engedélyezve van az igény szerinti (JIT) hibakeresés.
A jelentéskészítési folyamatról további információt az _CrtDbgReport, _CrtDbgReportW függvény tartalmaz. A helyességi hibák elhárításáról és a makrók hibakeresési hibakezelési mechanizmusként való használatáról további információt a makrók jelentéskészítéshez című témakörben talál.
A makrók mellett _ASSERT a assert makró a programlogika ellenőrzésére is használható. Ez a makró a kódtárak hibakeresési és kiadási verzióiban is elérhető. A _RPThibakeresési _RPTF makrók hibakeresési jelentések létrehozásához is elérhetők, de nem értékelnek ki kifejezéseket. A _RPT makrók egyszerű jelentést hoznak létre. A _RPTF makrók tartalmazzák a forrásfájlt és a sorszámot, amelyben a jelentésmakrót meghívták a létrehozott jelentésben. Ezeknek a makróknak széles karakterverziói érhetők el (_RPTW, _RPTFW). A széles karakterverziók megegyeznek a keskeny karakterverziókkal, azzal a kivételrel, hogy a széles karaktersztringek minden sztringparaméterhez és kimenethez használhatók.
Bár _ASSERT_EXPRaz _ASSERT_ASSERTE alkalmazásnak <crtdbg.h>a C futásidejű kódtár hibakeresési verziójához kell kapcsolódnia, mivel _DEBUG ezek a makrók más futásidejű függvényeket is meghívnak.
Requirements
| Macro | Kötelező fejléc |
|---|---|
| \ |
<crtdbg.h> |
Example
Ebben a programban a rendszer hívásokat indít a _ASSERT_ASSERTE feltétel string1 == string2teszteléséhez a makrókhoz és a makrókhoz. Ha a feltétel meghiúsul, ezek a makrók diagnosztikai üzenetet nyomtatnak. A _RPT program a makrók és _RPTF a makrók csoportját is gyakorolja a függvény alternatívaként printf .
// 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'
Lásd még
Hibakeresési rutinok
assert Makró, _assert, _wassert
_RPT, _RPTF, _RPTW_RPTFW Makrók