Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Egy helyességi feltétel, más néven Assert utasítás egy Ön által megadott feltételt tesztel, amelyet argumentumként adhat meg az Assert utasításhoz. Ha a feltétel igaz értéket ad vissza, nem történik művelet. Ha a feltétel hamis értéket ad vissza, a helyességi feltétel sikertelen lesz. Ha hibakeresési buildet futtat, a program megszakító üzemmódba lép.
Ebben a témakörben
Állítások a System.Diagnostics névtérben
Nyomkövetési és hibakeresési követelmények
Igényérvényesítési viselkedés testreszabása
Állítások beállítása konfigurációs fájlokban
Állítások a System.Diagnostics névtérben
A Visual Basic és a Visual C#-ban a Assert metódust használhatja vagy a Debug, vagy a Trace közül, melyek a System.Diagnostics névtérben találhatók.
Debug az osztálymódszerek nem szerepelnek a program kiadási verziójában, így nem növelik a kiadási kód méretét, és nem csökkentik a sebességét.
A C++ nem támogatja az Debug osztálymódszereket. Ugyanezt a hatást úgy érheti el, hogy az Trace osztályt feltételes fordítással használja, például #ifdef DEBUG... #endif.
A Debug.Assert metódus
A System.Diagnostics.Debug.Assert metódus segítségével szabadon tesztelheti azokat a feltételeket, amelyeknek igaznak kell lennie, ha a kód helyes. Tegyük fel például, hogy egész számosztó függvényt írt. A matematika szabályai szerint az osztó soha nem lehet nulla. Ezt egy állítással tesztelheti:
int IntegerDivide ( int dividend , int divisor )
{
Debug.Assert ( divisor != 0 );
return ( dividend / divisor );
}
Ha ezt a kódot a hibakereső alatt futtatja, a rendszer kiértékeli az állítási utasítást, de a Kiadás verzióban az összehasonlítás nem történik meg, így nincs további többletterhelés.
Íme egy másik példa. Van egy osztálya, amely egy ellenőrző fiókot implementál az alábbiak szerint:
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Mielőtt pénzt vonna ki a számláról, győződjön meg arról, hogy a számla egyenlege elegendő a visszavonásra készülő összeg fedezéséhez. Az egyenleg ellenőrzéséhez megírhat egy állítást:
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Vegye figyelembe, hogy a System.Diagnostics.Debug.Assert metódus hívásai eltűnnek a kód kiadási verziójának létrehozásakor. Ez azt jelenti, hogy az egyenleget ellenőrző hívás eltűnik a Kiadás verzióban. A probléma megoldásához cserélje le System.Diagnostics.Debug.Assert a következőt System.Diagnostics.Trace.Assert, amely nem tűnik el a kiadási verzióban:
A System.Diagnostics.Trace.Assert hívások többletterhelést jelentenek a kiadási verzióban, ellentétben a System.Diagnostics.Debug.Assert hívásokkal.
A Debug.Assert mellékhatásai
Ha használja System.Diagnostics.Debug.Assert, győződjön meg arról, hogy a benne lévő Assert kód nem módosítja a program eredményeit, ha Assert el lett távolítva. Ellenkező esetben előfordulhat, hogy véletlenül olyan hibát vezet be, amely csak a program kiadási verziójában jelenik meg. Különösen ügyeljen a függvény- vagy eljáráshívásokat tartalmazó állításokra, például a következő példára:
Ez a System.Diagnostics.Debug.Assert használat első pillantásra biztonságosnak tűnhet, de tegyük fel, hogy a meas függvény minden híváskor frissít egy számlálót. A kiadási verzió létrehozásakor ez a meas-hívás megszűnik, így a számláló nem frissül. Ez egy példa egy mellékhatással rendelkező függvényre. A mellékhatásokat tartalmazó függvény hívásának megszüntetése olyan hibát eredményezhet, amely csak a kiadási verzióban jelenik meg. Az ilyen problémák elkerülése érdekében ne helyezzen függvényhívásokat utasításba System.Diagnostics.Debug.Assert . Használjon helyette egy ideiglenes változót:
Még akkor is érdemes elkerülni, hogy függvényhívásokat helyezzünk el egy System.Diagnostics.Trace.Assert utasításon belül, ha Assert-t használunk. Az ilyen hívásoknak biztonságosnak kell lenniük, mert System.Diagnostics.Trace.Assert az utasítások nem törlődnek egy kiadási buildben. Azonban, ha szokásból kerüli az ilyen szerkezeteket, akkor kevésbé valószínű, hogy hibát követ el, amikor használja System.Diagnostics.Debug.Assert.
Nyomkövetési és hibakeresési követelmények
Ha a Projektet a Visual Studio varázslókkal hozza létre, a TRACE szimbólum alapértelmezés szerint a Kiadás és a Hibakeresés konfigurációban is meg van határozva. A HIBAKERESÉS szimbólum alapértelmezés szerint csak a hibakeresési buildben van definiálva.
Ellenkező esetben a Trace metódusok működéséhez a programnak az alábbiak egyikével kell rendelkeznie a forrásfájl tetején:
#Const TRACE = Truea Visual Basicben#define TRACEVisual C# és C++ nyelvenVagy a programot a TRACE beállítással kell felépíteni:
/d:TRACE=Truea Visual Basicben/d:TRACEVisual C# és C++ nyelvenHa A hibakeresési módszereket C# vagy Visual Basic Release buildben kell használnia, meg kell adnia a DEBUG szimbólumot a kiadási konfigurációban.
A C++ nem támogatja az Debug osztálymódszereket. Ugyanezt a hatást úgy érheti el, hogy az Trace osztályt feltételes fordítással használja, például
#ifdef DEBUG...#endif. Ezeket a szimbólumokat a <Projekttulajdonságok> lapjai párbeszédpanelen határozhatja meg. További információ: Visual Basic Hibakeresési konfiguráció projektbeállításainak módosítása vagy A C vagy C++ hibakeresési konfiguráció projektbeállításainak módosítása.
Argumentumok érvényesítése
System.Diagnostics.Trace.Assert és System.Diagnostics.Debug.Assert legfeljebb három argumentumot vehet fel. Az első kötelező argumentum az ellenőrizni kívánt feltétel. Ha a System.Diagnostics.Trace.Assert(Boolean) vagy a System.Diagnostics.Debug.Assert(Boolean) funkciókat csak egy argumentummal hívja meg, a Assert metódus ellenőrzi a feltételt, és ha az eredmény hamis, a hívásverem tartalmát a Kimenet ablakba írja ki. Az alábbi példa a következőt mutatja be System.Diagnostics.Trace.Assert(Boolean) és System.Diagnostics.Debug.Assert(Boolean):
A második és harmadik paramétereknek, ha vannak ilyenek, karakterláncoknak kell lenniük. Ha meghív System.Diagnostics.Trace.Assert vagy System.Diagnostics.Debug.Assert két vagy három argumentummal rendelkezik, az első argumentum egy feltétel. A metódus ellenőrzi a feltételt, és ha az eredmény hamis, a második és a harmadik sztringet adja ki. Az alábbi példa azt mutatja be, hogyan használható a System.Diagnostics.Debug.Assert(Boolean, String) és a System.Diagnostics.Trace.Assert(Boolean, String) két argumentummal.
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
Az alábbi példa System.Diagnostics.Debug.Assert(Boolean, String, String) és System.Diagnostics.Trace.Assert(Boolean, String, String) használatát mutatja be három argumentummal:
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
Igényérvényesítési viselkedés testreszabása
Ha az alkalmazást felhasználói felület módban futtatja, a Assert metódus megjeleníti a Helyességi hiba párbeszédpanelt , ha a feltétel meghiúsul. Azok a műveletek, amelyek akkor történnek, amikor egy állítás nem teljesül, a Listeners vagy Listeners tulajdonság által vannak szabályozva.
A kimeneti viselkedést testre szabhatja úgy, hogy hozzáad egy TraceListener objektumot a Listeners gyűjteményhez, eltávolít egy TraceListener gyűjteményből Listeners , vagy felülírja egy System.Diagnostics.TraceListener.Fail meglévő TraceListener metódusát, hogy az másképp viselkedjen.
Felülbírálhatja például azt a System.Diagnostics.TraceListener.Fail metódust, amely egy eseménynaplóba ír, ahelyett, hogy az Assertion Failed párbeszédpanelt jeleníti meg .
A kimenet testreszabásához a programnak tartalmaznia kell egy figyelőt, örökölnie kell a TraceListener és felül kell írnia a System.Diagnostics.TraceListener.Fail metódust.
További információ: Nyomkövetési figyelők.
Állítások beállítása konfigurációs fájlokban
Az állításokat a programkonfigurációs fájlban és a kódban is beállíthatja. További információ: System.Diagnostics.Trace.Assert vagy System.Diagnostics.Debug.Assert.