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
Koncepcje
Inne zasoby
Śledzenie i instrumentacji aplikacji
Przygotowanie debugowania: C#, F# i typy projektów Visual Basic