Výrazy ve spravovaném kódu
Je výraz nebo Assert prohlášení, testuje podmínku, kterou určíte jako argument Assert prohlášení.Pokud bude podmínka vyhodnocena jako true, nedojde k žádné akci.Pokud bude podmínka vyhodnocena jako false, výraz se nezdaří.Pokud používáte systém s ladicí sestavení, program zadá režimu přerušení.
V tomto tématu
Nepodmíněných výrazů v oboru názvů System.Diagnostics
Metoda příkazu Debug.Assert
Vedlejší účinky příkazu Debug.Assert
Požadavky na ladění a trasování
Vyhodnocení argumenty
Přizpůsobení chování Assert
Kontrolní výrazy nastavení v konfiguračních souborech
Nepodmíněných výrazů v oboru názvů System.Diagnostics
V jazyce Visual Basic a Visual C#, můžete použít Assert metoda buď z Debug nebo Trace, které jsou v System.Diagnostics oboru názvů.Debugmetody třídy nejsou zahrnuty ve verzi programu, tak zvětšit nebo snížit rychlost vydaného kódu.
C++ nepodporuje Debug metody třídy.Pomocí můžete dosáhnout stejného efektu Trace třídou s podmíněné kompilace, jako je například #ifdef DEBUG...#endif.
V tomto tématu
Metoda příkazu Debug.Assert
Použití Debug.Assert metoda volně na zkušební podmínky, které by měly mít hodnotu true, pokud je váš kód správně.Například předpokládejme, že jste napsali celé rozdělení funkcí.Podle pravidel matematice dělitel nikdy být nula.To může testovat pomocí kontrolní výrazy:
Function IntegerDivide(ByVal dividend As Integer, ByVal divisor As Integer) As Integer
Debug.Assert(divisor <> 0)
Return CInt(dividend / divisor)
End Function
int IntegerDivide ( int dividend , int divisor )
{ Debug.Assert ( divisor != 0 );
return ( dividend / divisor ); }
Při spuštění tohoto kódu v ladicím programu, vyhodnotí výraz, ale ve verzi, není provedeno porovnání, je tedy bez dalších nároků na výkon.
Zde je další příklad.Máte třídu, která implementuje šekový účet následujícím způsobem:
Dim amount, balance As Double
balance = savingsAccount.balance
Debug.Assert(amount <= balance)
SavingsAccount.Withdraw(amount)
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Před odejmout peněz z účtu má zajistit dostatečné pokrytí částky, kterou připravujete odejmout zůstatku na účtu.Můžete například napsat výraz ke kontrole salda:
Dim amount, balance As Double
balance = savingsAccount.balance
Trace.Assert(amount <= balance)
SavingsAccount.Withdraw(amount)
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Všimněte si, že volání Debug.Assert metoda zmizí vytvořit verzi vašeho kódu.To znamená, že volání, který zkontroluje zůstatek zmizí v prodejní verze.Chcete-li tento problém vyřešit, měli byste nahradit Debug.Assert s Trace.Assert, který nezmizí v verze:
Volání Trace.Assert přidejte režie verze, na rozdíl od volání Debug.Assert.
V tomto tématu
Vedlejší účinky příkazu Debug.Assert
Používáte-li Debug.Assert, ujistěte se, že některý kód uvnitř Assert nedojde ke změně výsledků programu, pokud Assert je odebrána.Jinak může neúmyslně zavést chybu, která zobrazí pouze ve verzi programu.Buďte obzvlášť opatrní asi tvrzení, které obsahují funkce nebo procedury volání, například v následujícím příkladu:
' unsafe code
Debug.Assert (meas(i) <> 0 )
// unsafe code
Debug.Assert (meas(i) != 0 );
Toto použití Debug.Assert může být na první pohled bezpečné, ale Předpokládejme, že funkce meas aktualizuje čítače pokaždé, když je volána.Při vytváření prodejní verze tohoto volání meas odstraněno, takže čítač aktualizováno.Toto je příklad funkce s vedlejším účinkem.Vyloučení volání funkce, která má vedlejší účinky může způsobit chybu, která se zobrazí pouze u vydané verze.Chcete-li se těmto problémům, neumísťujte volání funkcí v Debug.Assert prohlášení.Místo toho použijte dočasné proměnné:
temp = meas( i )
Debug.Assert (temp <> 0)
temp = meas( i );
Debug.Assert ( temp != 0 );
I když použijete Trace.Assert, můžete chtít stále Neumísťujte volání funkcí uvnitř Assert prohlášení.Tato volání by mělo být bezpečné, protože Trace.Assert příkazy nejsou vyloučeny ve vydané verzi.Pokud byste se vyhnout takové konstrukce za věc zvyku, je však méně pravděpodobné, že uděláte při použití Debug.Assert.
V tomto tématu
Požadavky na ladění a trasování
Pokud jste vytvořili váš projekt pomocí Visual Studio průvodců, symbol trasování je definován ve výchozím nastavení v konfiguraci ladění a vydání.Symboly pro ladění je definován ve výchozím nastavení pouze v sestavení ladění.
Jinak pro Trace metod práce, program musí mít jednu z následujících v horní části zdrojového souboru:
#Const TRACE = Truev jazyce Visual Basic
#define TRACEv jazyce Visual C# a C++
Nebo program musí být vytvořeny s možností trasování:
/d:TRACE=Truev jazyce Visual Basic
/d:TRACEv jazyce Visual C# a C++
Pokud potřebujete použít metody ladění v jazyce C# nebo Visual Basic verze sestavení, je nutné definovat symboly pro ladění v konfiguraci pro vydání.
C++ nepodporuje Debug metody třídy.Pomocí můžete dosáhnout stejného efektu Trace třídou s podmíněné kompilace, jako je například #ifdef DEBUG...#endif.Můžete definovat tyto symboly <Project> Stránky vlastností dialogové okno.Další informace naleznete v tématu Změna nastavení projektu pro konfiguraci ladění jazyka Visual Basic nebo Změna nastavení projektu pro konfiguraci ladění C++ a C.
Vyhodnocení argumenty
Trace.Asserta Debug.Assert trvat až tři argumenty.První argument je povinný, je podmínka, kterou chcete zkontrolovat.Pokud zavoláte Trace.Assert(Boolean) nebo Debug.Assert(Boolean) s jediným argumentem, Assert metoda kontroluje podmínku a pokud je výsledek false, uloží obsah zásobníku volání výstup okna.Následující příklad ukazuje Trace.Assert(Boolean) a Debug.Assert(Boolean):
Debug.Assert(stacksize > 0)
Trace.Assert(stacksize > 0)
Debug.Assert ( stacksize > 0 );
Trace.Assert ( stacksize > 0 );
Druhý a třetí argument, je-li přítomen, musí být řetězce.Pokud zavoláte Trace.Assert nebo Debug.Assert s dvěma nebo třemi argumenty, je argument podmínka.Metoda kontroluje podmínku a pokud je výsledek false, vypíše řetězec druhý a třetí řetězce.Následující příklad ukazuje Debug.Assert(Boolean, String) a Trace.Assert(Boolean, String) s dva argumenty:
Debug.Assert(stacksize > 0, "Out of stack space")
Trace.Assert(stacksize > 0, "Out of stack space")
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
Následující příklad ukazuje Assert a Assert:
Debug.Assert(stacksize > 0, "Out of stack space. Bytes left:" , Format(size, "G"))
Trace.Assert(stacksize > 0, "Out of stack space. Bytes left:" , Format(size, "G"))
Trace.Assert(stacksize > 0, "Out of stack space. Bytes left:", "inctemp failed on third call" )
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
V tomto tématu
Přizpůsobení chování Assert
Při spuštění aplikace v režimu uživatelského rozhraní Assert metoda zobrazí Chyba při vyhodnocení dialogové okno při stavu selhání.Akce, ke kterým dojde při selhání kontrolní výrazy jsou řízeny Listeners nebo Listeners vlastnost.
Chování výstup lze přizpůsobit přidáním TraceListener objektu Listeners kolekce odebráním TraceListener z Listeners kolekce, nebo přepsáním TraceListener.Fail metodu existující TraceListener tak, aby se chovají odlišně.
Například můžete přepsat TraceListener.Fail metody pro zápis do protokolu událostí namísto zobrazení Chyba při vyhodnocení dialogové okno.
Chcete-li přizpůsobit výstup tímto způsobem, program musí obsahovat posluchače a musí dědit z TraceListener a přepsat jeho TraceListener.Fail metoda.
Další informace naleznete v tématu Trasování posluchače..
V tomto tématu
Kontrolní výrazy nastavení v konfiguračních souborech
Výrazy lze nastavit v konfiguračním souboru aplikace stejně jako vašeho kódu.Další informace naleznete v tématech Trace.Assert a Debug.Assert.
Viz také
Úkoly
Jak: podmíněné kompilace s ladění a trasování
Referenční dokumentace
Koncepty
Další zdroje
Trasování a nastavení aplikací