Debugowanie LINQ
Visual Studioobsługuje debugowanie języka zintegrowane kwerendy kodu (LINQ), z pewnymi ograniczeniami. Najbardziej debugowania funkcje pracy z LINQ oświadczenia, w tym stepping, punktów kontrolnych i wyświetlanie wyników w debugger systemu windows.W tym temacie opisano ograniczenia głównych LINQ debugowania.
W tym temacie
Opisuje specjalne okoliczności należy wziąć pod uwagę podczas wyświetlania wyników kwerendy LINQ w debugerze. |
|
Opisano zachowanie stepping podczas debugowania LINQ. |
|
Opisano zachowanie, można oczekiwać, wyświetlić, gdy próbujesz edytować kod LINQ podczas debugowania. |
Wyświetlanie wyników LINQ
Wyniki instrukcji LINQ można wyświetlać przy użyciu DataTips, okno czujki i w oknie dialogowym QuickWatch.Gdy okno źródła, można zatrzymać wskaźnik myszy na kwerendy w oknie źródła i pojawi się DataTip.Można skopiować zmiennej LINQ i wkleić go do okna czujki lub QuickWatch, okno dialogowe.
W LINQ kwerendy nie jest sprawdzane podczas tworzenia lub zadeklarowane, ale tylko wtedy, gdy kwerenda jest używana.W związku z tym kwerenda nie musi mieć wartość sprawdzana jest zgodność.Pełny opis tworzenia kwerend i oceny, zobacz Wprowadzenie do zapytań LINQ (C#) lub Pisanie pierwszej kwerendy LINQ (Visual Basic).
Aby wyświetlić wynik kwerendy, debuger musi oszacować go.To niejawne oceny, która występuje podczas wyświetlania wyniku zapytania LINQ w debugerze, ma pewne efekty, które należy wziąć pod uwagę:
Każdej oceny kwerendy wymaga czasu.Rozwinięcie węzła wyniki zajmuje trochę czasu.Niektóre kwerendy powtarzających się oceny może spowodować zauważalne wydajności.
Oceny kwerendy może powodować efektów ubocznych, które zmian wartości danych lub stanu programu.Nie wszystkie kwerendy mają efektów ubocznych.Aby ustalić, czy kwerenda może być bezpiecznie oceniana bez skutków ubocznych, należy zrozumieć kod, który wykonuje kwerendę.
Stepping i LINQ
Podczas debugowania kodu LINQ stepping ma pewne różnice funkcjonalne, które należy wiedzieć o.
LINQ SQL
W LINQ kwerendy SQL predykatu kodu jest poza kontrolą debugera.Nie można zatem Wkrocz predykatu kodu.Każda kwerenda kompiluje do drzewa wyrażenie generuje kod, który jest poza kontrolą debugera.
Stepping w języku Visual Basic
Są krokowe programu Visual Basic i debuger napotka zgłoszenia kwerendy, nie wkraczać do deklaracji ale podświetli cały deklaracji jako pojedynczą instrukcją.To zachowanie występuje, ponieważ kwerenda nie jest obliczana, dopóki nie jest ona wywoływana.Aby uzyskać więcej informacji, zobacz Wprowadzenie do LINQ w języku Visual Basic.
Jeśli przechodzenia do kolejnych poniższy przykład kodu debugera podświetla deklaracji query lub utworzenie kwerendy, jako pojedynczej instrukcji.
Function MyFunction(ByVal x As Char)
Return True
End Function
Sub Main()
'Query creation
Dim x = From it In "faoaoeua" _
Where MyFunction(it) _
Select New With {.a = it}
' Query execution
For Each cur In x
Console.WriteLine(cur.ToString())
Next
End Sub
Gdy krok się ponownie, podświetli debugera For Each cur In x.W następnym kroku kroki do funkcji MyFunction.Po krokowe MyFunction, on Przeskakuje wstecz do Console.WriteLine(cur.ToSting()).W żadnym punkcie nie on krokowo predykatu kodu w zgłoszeniu kwerendy Chociaż debugera oceny tego kodu.
Zastąpienie predykatu funkcji umożliwiających Stepping (Visual Basic)
Jeśli masz do kroków predykatu kodu na potrzeby debugowania, można zastąpić predykat wywołanie funkcji, która zawiera oryginalny kod predykatu.Załóżmy na przykład, kod ten:
Dim items() as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
' Get the even numbers
Dim query = From nextInt in items Where nextInt Mod 2 = 0 Select nextInt
For each item in query
Console.WriteLine(item)
Next
Kod predykatu można przenieść do nowej funkcji o nazwie IsEven:
Dim items () as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
' Get the even numbers
Dim query = From nextInt in items Where IsEven(nextInt) Select nextInt
For each item in query
Console.WriteLine(item)
Next
...
Function IsEven(item As =Integer) as Boolean
Return item Mod 2 = 0
End Function
Zrewidowane kwerendy wywołuje funkcję IsEven w każdym przejściu przez items.Można użyć okna debugera, czy każdego elementu spełnia określony warunek i można przechodzić przez kod w IsEven.Predykat w tym przykładzie jest dość prosty.Jednak jeśli predykatu trudniejsze do debugowania, technika ta może być bardzo przydatne.
Edytowanie i nadal nie jest obsługiwane dla LINQ
Edit- and -Continue nie obsługuje zmiany zapytań LINQ.Jeśli dodać, usunąć lub zmienić instrukcję LINQ podczas sesji debugowania, pojawi się okno dialogowe, informujące, że zmiana nie jest obsługiwany przez Edit- and -Continue.W tym momencie można cofnąć zmiany lub zatrzymać sesję debugowania i ponownie uruchomić nową sesję edycji kodu.
Ponadto, edytować i Kontynuuj nie obsługuje zmiany typu lub wartości zmiennej, która jest używana w instrukcji LINQ.Ponownie można albo cofnąć zmiany lub zatrzymać i ponownie uruchomić sesji debugowania.
W C# nie można używać na dowolny kod w metodzie, zawierającego kwerendę LINQ Edit- and -Continue.
W języku Visual Basic można użyć Edit- and -Continue nie LINQ kod, nawet w przypadku metoda, która zawiera kwerendę LINQ.Można dodać lub usunąć kod przed instrukcją LINQ, nawet jeśli zmiany wpływają na numer wiersza zapytania LINQ.Debugowanie doświadczeń innych niż LINQ kodu języka Visual Basic pozostaje taki sam, jak przed LINQ został wprowadzony.Nie można zmienić, dodać ani usunąć zapytanie LINQ, jednak, chyba że chcesz zatrzymać debugowanie, aby zastosować zmiany.
Zobacz też
Koncepcje
Wprowadzenie do zapytań LINQ (C#)
Wprowadzenie do LINQ w języku Visual Basic