Udostępnij za pośrednictwem


Potwierdzeń w kodzie zarządzanym.

An assertion lub Assert instrukcji, testuje warunek, który określono jako argument do Assert instrukcji.Jeśli warunek ma wartość PRAWDA, nic się nie dzieje.Gdy warunek jest spełniony, twierdzenie kończy się niepowodzeniem.Jeśli korzystasz z kompilacja do debugowania, program wprowadza tryb przerwania.

W tym temacie

Zapewnia, w obszarze nazw System.Diagnostics

Metoda Debug.Assert

Skutki uboczne Debug.Assert

Śledzenia i debugowania wymagania

Dochodzić argumenty

Dostosowywanie zachowania Assert

Ustawienie twierdzenia w plikach konfiguracyjnych

Zapewnia, w obszarze nazw System.Diagnostics

W języku Visual Basic i Visual C#, można użyć Assert metoda przy użyciu dowolnego Debug lub Trace, które znajdują się w System.Diagnostics obszaru nazw.Debugmetody klasy nie znajdują się w wersji tego programu, więc nie zwiększyć rozmiar lub zmniejsz szybkość kodzie wydania.

Nie obsługuje języka C++ Debug metody klasy.Ten sam efekt można osiągnąć za pomocą Trace klasy z kompilacji warunkowej, takich jak #ifdef DEBUG...#endif.

W tym temacie

Metoda Debug.Assert

Użycie Debug.Assert metoda swobodnie, aby przetestować warunki, które należy uznać za prawdziwe, jeśli kod jest poprawny.Na przykład załóżmy, że napisano całkowitą podzielić funkcji.W regułach matematyki dzielnik nigdy nie może być zerowa.Użytkownik może to sprawdzić za pomocą podanie:

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 ); }

Gdy uruchomi się ten kod w debugerze, sprawdzana jest zgodność instrukcja assertion, ale w wersji wydania nie dokonywane jest porównanie, więc nie ma żadnych dodatkowe obciążenie.

Oto inny przykład.Masz klasy implementującej Konto czekowe się następujące zmiany:

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 );

Przed wypłacić pieniądze z konta, która ma być upewnij się, że saldo konta jest wystarczający do pokrycia kwoty przygotowywanej do wycofania.Możesz pisać podanie do sprawdzenia aktualnego 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 );

Należy zauważyć, że wzywa do Debug.Assert metoda znikają podczas tworzenia wersji kodu.Oznacza to, że wywołanie, które sprawdza saldo znika w wersji wydania.Aby rozwiązać ten problem, należy zastąpić Debug.Assert z Trace.Assert, który nie znika w wersji wydania:

Wzywa do Trace.Assert dodać dodatkowe obciążenie do wersji wydania, w przeciwieństwie do połączeń w celu Debug.Assert.

W tym temacie

Skutki uboczne Debug.Assert

Podczas korzystania z Debug.Assert, upewnij się, że dowolny kod wewnątrz Assert nie ulega zmianie wyników programu, jeśli Assert jest usuwany.W przeciwnym razie może przypadkowo wprowadzają błąd, który pojawia się tylko w wersji tego programu.Należy zachować szczególną ostrożność około twierdzi, które zawierają, funkcja lub procedura wywołania, jak w poniższym przykładzie:

' unsafe code
Debug.Assert (meas(i) <> 0 )
// unsafe code
Debug.Assert (meas(i) != 0 );

Takie wykorzystanie Debug.Assert może pojawić się bezpieczny na pierwszy rzut oka, ale Załóżmy, że MEA funkcji Licznik każdym aktualizuje nazywa się.Podczas konstruowania numerem wersji, to wywołanie do MEA jest wyeliminowane, więc licznik nie zostanie zaktualizowany.Jest to przykład funkcji z efektem ubocznym.Eliminując wywołanie funkcji, która ma skutków ubocznych może spowodować błąd, który pojawia się tylko w wersji wydania.Aby uniknąć takich problemów, nie należy umieszczać wywołania funkcji w Debug.Assert instrukcji.Zamiast tego użyj zmiennej tymczasowej:

temp = meas( i )
Debug.Assert (temp <> 0)
temp = meas( i );
Debug.Assert ( temp != 0 );

Nawet podczas korzystania z Trace.Assert, może być nadal chcesz nie dopuścić do wywołania funkcji wewnątrz Assert instrukcji.Takie połączenia powinny być bezpieczne, ponieważ Trace.Assert instrukcji nie są eliminowane w wydanej kompilacji.Jednak jeśli uniknąć takich struktur jako kwestia przyzwyczajenia jest mniej prawdopodobne że błąd, korzystając z Debug.Assert.

W tym temacie

Śledzenia i debugowania wymagania

Jeśli tworzysz za pomocą projektu Visual Studio kreatorów, symbol śledzenia jest zdefiniowana domyślnie w konfiguracjach wydania i debugowania.Symbol debugowania jest domyślnie definiowane tylko w kompilacja do debugowania.

Inny sposób, aby Trace metody do pracy, program musi mieć jedną z następujących czynności w górnej części pliku źródłowego:

  • #Const TRACE = Truew języku Visual Basic

  • #define TRACEw środowisku Visual C# i C++

Lub program muszą być budowane z opcji śledzenia:

  • /d:TRACE=Truew języku Visual Basic

  • /d:TRACEw środowisku Visual C# i C++

W przypadku należy użyć metody debugowania w C# lub Visual Basic wersji kompilacji, zdefiniuj symbol debugowania w konfiguracji wydania.

Nie obsługuje języka C++ Debug metody klasy.Ten sam efekt można osiągnąć za pomocą Trace klasy z kompilacji warunkowej, takich jak #ifdef DEBUG...#endif.Można zdefiniować następujące symbole w <Project> Strony właściwości okno dialogowe.Aby uzyskać więcej informacji, zobacz Zmiany ustawień projektu dla języka Visual Basic Debug Configuration lub Zmiany ustawień projektu dla C lub C++ Debug Configuration.

Dochodzić argumenty

Trace.Asserti Debug.Assert podjąć maksymalnie trzy argumenty.Pierwszy argument, co jest wymagane, jest warunek, który chcesz sprawdzić.Jeśli wywoła się Trace.Assert(Boolean) lub Debug.Assert(Boolean) z tylko jeden argument, Assert metoda sprawdza warunek i, jeśli wynik nie jest spełniony, wyświetla zawartość stosu wywołań do dane wyjściowe okna.W poniższym przykładzie pokazano Trace.Assert(Boolean) i Debug.Assert(Boolean):

Debug.Assert(stacksize > 0)
Trace.Assert(stacksize > 0)
Debug.Assert ( stacksize > 0 );
Trace.Assert ( stacksize > 0 ); 

Argumenty drugi i trzeci, jeśli jest obecny, muszą być ciągami.Jeśli wywoła się Trace.Assert lub Debug.Assert z dwóch lub trzech argumentów, pierwszy argument jest warunkiem.Metoda sprawdza warunek i, jeśli wynik nie jest spełniony, wyświetla ciąg drugiego i trzeciego ciągi.W poniższym przykładzie pokazano Debug.Assert(Boolean, String) i Trace.Assert(Boolean, String) przypadku dwóch argumentów:

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" );

W poniższym przykładzie pokazano Assert i 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" ); 

W tym temacie

Dostosowywanie zachowania Assert

Po uruchomieniu aplikacji w trybie interfejsu użytkownika, Assert wyświetla metodę Assertion Failed okno dialogowe, gdy warunek nie powiedzie się.Akcje, które występują, gdy nie powiedzie się podanie są kontrolowane przez Listeners lub Listeners właściwość.

Zachowanie danych wyjściowych można dostosować, dodając TraceListener sprzeciwić się Listeners kolekcji, usuwając TraceListener z Listeners kolekcji, lub przez zastąpienie TraceListener.Fail metoda istniejącego TraceListener do zachowuje się inaczej.

Na przykład, można zastąpić TraceListener.Fail metoda zapisu do dziennika zdarzeń nie wyświetlać Assertion Failed okno dialogowe.

Aby dostosować dane wyjściowe w ten sposób, program musi zawierać detektora, a musi dziedziczyć z TraceListener i zastąpienie jej TraceListener.Fail metoda.

Aby uzyskać więcej informacji, zobacz Detektory śledzenia.

W tym temacie

Ustawienie twierdzenia w plikach konfiguracyjnych

Twierdzenia można ustawić w pliku konfiguracyjnym program jak również, jak w kodzie.Aby uzyskać więcej informacji, zobacz Trace.Assert lub Debug.Assert.

Zobacz też

Zadania

Jak: skompilować warunkowo z śledzenia i debugowania

Informacje

Debug.Assert

Trace.Assert

Koncepcje

Debuger zabezpieczeń

Inne zasoby

Śledzenie i instrumentacji aplikacji

Przygotowanie debugowania: C#, F# i typy projektów Visual Basic

Debugowanie kodu zarządzanego