Debugowanie LINQ
Visual Studioobsługuje integrację debugowanie języka zapytania kodu (LINQ), z pewnymi ograniczeniami. Funkcje najbardziej debugowania w pracy z instrukcji LINQ, w tym krok, ustawianie punktów przerwania i wyświetlanie wyników debuger systemu Windows.W tym temacie opisano głównych ograniczenia LINQ debugowania.
W tym temacie
Edytuj i Kontynuuj nie obsługuje LINQ
Wyświetlanie wyników LINQ
Wynik instrukcję LINQ można wyświetlić przy użyciu DataTips, obserwuj okno i QuickWatch okno dialogowe.Korzystając z okna źródło, można zatrzymać wskaźnik myszy na zapytania w oknie źródła i pojawi się porada dotycząca danych.Możesz skopiować zmienną LINQ i wkleić go do Obserwuj okno lub QuickWatch okno dialogowe.
W składniku LINQ zapytania nie jest szacowana podczas tworzenia lub zadeklarowany, ale tylko wtedy, gdy jest używany w zapytaniu.W związku z tym zapytanie nie ma wartość do czasu jest szacowana.Pełny opis tworzenia zapytań i oceny, zobacz Wprowadzenie do kwerend LINQ (C#) lub Pisanie pierwszej kwerendy LINQ (Visual Basic).
Aby wyświetlić wynik zapytania, debuger musi zwrócić go.Ten oceny niejawne, która występuje, gdy w wyniku zapytania LINQ wyświetlania debugera, ma pewne efekty, które należy wziąć pod uwagę:
Czas w każdej oceny zapytania.Rozwinięcie węzła wyniki czas.W przypadku niektórych kwerend powtórzony oceny może spowodować zmniejszenie wydajności zauważalne.
Obliczenia zapytania może spowodować skutki uboczne, będące zmiany wartości danych lub stan programu.Nie wszystkie zapytania ma efekty uboczne.Aby ustalić, czy kwerendy może być bezpiecznie oceniana bez efekty uboczne, możesz zrozumieć kodu, który implementuje zapytania.
Krok i LINQ
Podczas debugowania kodu LINQ, krok ma pewne różnice funkcjonalne, które powinni wiedzieć o.
LINQ do SQL
W składniku LINQ to zapytania SQL kodu predykatu wykracza poza kontrolą firmy debugera.Dlatego nie można Wkrocz kodu predykatu.Wszelkie zapytania kompilowany na drzewo wyrażeń tworzy kod, który jest poza kontrolą debugera.
Przechodzenie w języku Visual Basic
Gdy są krokowe program Visual Basic i debuger napotkał deklarację zapytania, nie Wkrocz deklaracji, ale służy do oznaczenia całego deklaracji za pomocą jednej instrukcji.Dzieje się tak, ponieważ zapytanie nie jest szacowana do momentu jego wywołaniu.Aby uzyskać więcej informacji, zobacz Wprowadzenie do LINQ w Visual Basic.
Jeśli przechodzenia do kolejnych poniższy przykład kodu, debuger służy do oznaczenia deklaracji zapytania lub tworzenia zapytań, za pomocą jednej 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
Podczas wykonywania kroków ponownie, debuger służy do oznaczenia For Each cur In x.W następnym kroku kroków do funkcji MyFunction.Po krokowe MyFunction, go przechodzi do Console.WriteLine(cur.ToSting()).W żadnym punkcie on krok po kroku predykatu kod w deklaracji zapytania, mimo że debuger oceny kodu.
Zastępowanie predykatu funkcji, aby włączyć przechodzenia krok po kroku (Visual Basic)
Jeśli masz celu kroków predykatu kodu na potrzeby debugowania, można zastąpić predykat po wywołaniu funkcji, która zawiera oryginalnego kodu predykatu.Załóżmy, że masz tego kodu:
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
Umieszczenie kodu predykatu 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
Kwerenda poprawione wywołuje funkcję IsEven w każdym przebiegu za pośrednictwem items.Debuger systemu windows można użyć, aby sprawdzić, czy każdy element spełnia określony warunek i można przejrzeć kod w IsEven.Predykat w tym przykładzie jest stosunkowo proste.Jednak jeśli trudniejsze predykat, z którym ma do debugowania, ta metoda jest bardzo przydatne.
Edytuj i Kontynuuj nie obsługuje LINQ
Edytuj i Kontynuuj nie obsługuje zmian do zapytań LINQ.Jeśli dodać, usunąć lub zmienić instrukcję LINQ podczas sesji debugowania, wyświetli się okno dialogowe informuje, że zmiana nie jest obsługiwany przez Edytuj i Kontynuuj.W tym momencie można cofnąć zmiany lub Zatrzymaj sesję debugowania i ponownie uruchom nową sesję z kodem edytowany.
Ponadto, Edytuj i Kontynuuj nie obsługuje zmiany typ lub wartość zmiennej, która jest używana w instrukcji LINQ.Ponownie można cofnąć zmiany lub zatrzymać i uruchomić ponownie sesję debugowania.
W języku C# nie można użyć Edytuj i Kontynuuj na dowolny kod w metodzie, która zawiera kwerendę LINQ.
W języku Visual Basic można użyć Edytuj i Kontynuuj na kod bez LINQ, nawet w przypadku metodę, która zawiera kwerendę LINQ.Można dodać lub usunąć kod przed instrukcją LINQ, nawet jeśli zmian na numer wiersza zapytania LINQ.Debugowanie obsługi dla innych niż LINQ kodu języka Visual Basic, pozostanie taka sama jak przed wprowadzeniem LINQ.Nie można zmienić, dodać lub jednak usunąć zapytanie LINQ, chyba że chcesz zatrzymać debugowanie, aby zastosować zmiany.
Zobacz też
Koncepcje
Obsługa wyjątków (debugowanie)
Wprowadzenie do kwerend LINQ (C#)
Wprowadzenie do LINQ w Visual Basic