Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kontrolní příkaz – neboli příkaz Assert – testuje podmínku, kterou zadáte jako argument příkazu Assert. Pokud je tato podmínka vyhodnocena jako true, nedojde k žádné akci. Pokud je tato podmínka vyhodnocena jako false, kontrola selže. Pokud používáte ladicí sestavení, program přejde do režimu přerušení.
V tomto tématu
Podmínky v oboru názvů System.Diagnostics
Požadavky na trasování a ladění
Nastavení asertů v konfiguračních souborech
Aserce v System.Diagnostics Namespace
V jazyce Visual Basic a Visual C# můžete použít metodu Assert z Debug nebo z Trace, které jsou v oboru názvů System.Diagnostics.
Debug Metody tříd nejsou součástí verze vašeho programu, takže nezvětšují velikost ani nezmenšují rychlost kódu vydané verze.
C++ nepodporuje Debug metody třídy. Stejný účinek můžete dosáhnout pomocí Trace třídy s podmíněnou kompilací, například #ifdef DEBUG... #endif.
Metoda Debug.Assert
K volnému testování podmínek, které by měly být pravdivé, pokud je váš kód správný, použijte metodu System.Diagnostics.Debug.Assert. Předpokládejme například, že jste napsali celočíselnou dělicí funkci. Podle pravidel matematiky nemůže být dělitel nikdy nulový. Můžete to otestovat pomocí kontrolního výrazu:
int IntegerDivide ( int dividend , int divisor )
{
Debug.Assert ( divisor != 0 );
return ( dividend / divisor );
}
Když tento kód spustíte v ladicím programu, vyhodnocuje se příkaz kontrolního výrazu, ale ve verzi vydané verze se porovnání neprovedou, takže není k dispozici žádná další režie.
Tady je další příklad. Máte třídu, která implementuje kontrolní účet následujícím způsobem:
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Před stažením peněz z účtu chcete mít jistotu, že zůstatek na účtu stačí k pokrytí částky, kterou připravujete na výběr. Můžete napsat kontrolní výraz pro kontrolu zůstatku:
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Všimněte si, že volání metody System.Diagnostics.Debug.Assert zmizí, když vytvoříte publikovanou verzi svého kódu. To znamená, že volání, které kontroluje zůstatek, zmizí ve vydané verzi. Chcete-li tento problém vyřešit, měli byste nahradit System.Diagnostics.Debug.AssertSystem.Diagnostics.Trace.Assert, který nezmizí ve vydání:
Volání na System.Diagnostics.Trace.Assert přidávají dodatečné režijní náklady do vaší Release verze, což není případ volání na System.Diagnostics.Debug.Assert.
Vedlejší účinky debug.Assert
Při použití System.Diagnostics.Debug.Assertse ujistěte, že jakýkoli kód uvnitř Assert programu nezmění výsledky programu, pokud Assert je odebrán. V opačném případě můžete omylem zavést chybu, která se zobrazí pouze ve verzi vydané verze programu. Dávejte pozor zejména na aserty, které obsahují volání funkce nebo procedury, jako je uvedeno v následujícím příkladu:
Toto použití System.Diagnostics.Debug.Assert může být na první pohled bezpečné, ale předpokládejme, že funkce meas aktualizuje čítač pokaždé, když je volána. Když sestavíte verzi Release, toto volání "meas" se eliminuje, takže se čítač neaktualizuje. Toto je příklad funkce s vedlejším účinkem. Odstranění volání funkce, která má vedlejší účinky, může vést k chybě, která se zobrazí pouze ve verzi vydané verze. Abyste se těmto problémům vyhnuli, neumisťujte volání funkcí do System.Diagnostics.Debug.Assert příkazu. Místo toho použijte dočasnou proměnnou:
I když použijete System.Diagnostics.Trace.Assert, můžete se přesto chtít vyhnout umístění volání funkce do Assert příkazu. Taková volání by měla být bezpečná, protože System.Diagnostics.Trace.Assert příkazy se v buildu vydané verze neodstraní. Pokud se však takovým konstrukcím vyhnete ze zvyku, je méně pravděpodobné, že při použití System.Diagnostics.Debug.Assert uděláte chybu.
Požadavky na trasování a ladění
Pokud projekt vytvoříte pomocí průvodců sadou Visual Studio, je ve výchozím nastavení definován symbol TRACE v konfiguracích vydané verze i ladění. Symbol DEBUG je ve výchozím nastavení definován pouze v sestavení ladění.
Aby Trace metody fungovaly, musí mít váš program jednu z následujících možností v horní části zdrojového souboru:
#Const TRACE = Truev jazyce Visual Basic#define TRACEv jazyce Visual C# a C++Nebo váš program musí být sestaven pomocí možnosti TRACE:
/d:TRACE=Truev jazyce Visual Basic/d:TRACEv jazyce Visual C# a C++Pokud potřebujete použít metody Debug v sestavení typu Release jazyka C# nebo Visual Basic, je nutné definovat symbol DEBUG v konfiguraci Release.
C++ nepodporuje Debug metody třídy. Stejný účinek můžete dosáhnout pomocí Trace třídy s podmíněnou kompilací, například
#ifdef DEBUG...#endif. Tyto symboly můžete definovat v <dialogovém okně Stránky vlastností projektu>. 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í jazyka C nebo C++.
Argumenty pro assert
System.Diagnostics.Trace.Assert a System.Diagnostics.Debug.Assert přijímají až tři argumenty. První argument, který je povinný, je podmínka, kterou chcete zkontrolovat. Pokud voláte System.Diagnostics.Trace.Assert(Boolean) nebo System.Diagnostics.Debug.Assert(Boolean) používáte pouze jeden argument, Assert metoda zkontroluje podmínku a pokud je výsledek nepravdivý, vypíše obsah zásobníku volání do okna Výstup . Následující příklad ukazuje System.Diagnostics.Trace.Assert(Boolean) a System.Diagnostics.Debug.Assert(Boolean):
Druhý a třetí argument, pokud existuje, musí být řetězce. Pokud voláte System.Diagnostics.Trace.Assert nebo System.Diagnostics.Debug.Assert se dvěma nebo třemi argumenty, je prvním argumentem podmínka. Metoda zkontroluje podmínku a pokud je výsledek nepravda, vypíše druhý řetězec a třetí řetězce. Následující příklad ukazuje použití System.Diagnostics.Debug.Assert(Boolean, String) a System.Diagnostics.Trace.Assert(Boolean, String) se dvěma argumenty.
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
Následující příklad ukazuje System.Diagnostics.Debug.Assert(Boolean, String, String) a System.Diagnostics.Trace.Assert(Boolean, String, String) používá se se třemi argumenty:
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
Přizpůsobení chování funkce Assert
Pokud spustíte aplikaci v režimu uživatelského rozhraní, metoda Assert zobrazí dialogové okno Selhání tvrzení, když podmínka selže. Akce, ke kterým dochází v případě selhání kontrolního výrazu, jsou řízeny vlastností Listeners nebo Listeners.
Chování výstupu můžete přizpůsobit přidáním TraceListener objektu Listeners do kolekce, odebráním TraceListener kolekce Listeners nebo přepsáním System.Diagnostics.TraceListener.Fail metody existujícího TraceListener objektu, aby se choval jinak.
Například můžete přepsat metodu System.Diagnostics.TraceListener.Fail, abyste zapisovali do protokolu událostí místo zobrazení dialogového okna Kontrolní výraz selhal.
Chcete-li tímto způsobem přizpůsobit výstup, musí váš program obsahovat posluchač a musíte zdědit z TraceListener a přepsat jeho metodu System.Diagnostics.TraceListener.Fail.
Pro více informací se podívejte na Trace Listeners.
Nastavení assertí v konfiguračních souborech
Můžete nastavit aserce ve vašem konfiguračním souboru programu i v kódu. Další informace najdete v tématu System.Diagnostics.Trace.Assert nebo System.Diagnostics.Debug.Assert.