Sdílet prostřednictvím


Kontrolní 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 Naslouchací procesy trasování.

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

Postupy: Podmíněná kompilace pomocí atributu Trace a Debug

Referenční dokumentace

Debug.Assert

Trace.Assert

Koncepty

Zabezpečení ladicího programu

Další zdroje

Trasování a instrumentace aplikací

Příprava ladění: typy projektů jazyka C#, F# a Visual Basic

Ladění spravovaného kódu