Debuggen von LINQ

Visual Studio unterstützt das Debuggen von Language Integrated Query (LINQ)-Code, wobei einige Einschränkungen bestehen. Die meisten Debugfunktionen können mit LINQ-Anweisungen verwendet werden, darunter schrittweise Ausführung, Festlegen von Haltepunkten und Anzeigen von Ergebnissen in Debuggerfenstern.In diesem Thema werden die wichtigsten Einschränkungen von LINQ-Debugging.

In diesem Thema

Viewing LINQ Results

Beschreibt besondere Bedingungen, die beim Anzeigen von LINQ-Abfrageergebnissen im Debugger berücksichtigt werden sollten.

Stepping and LINQ

Erläutert das Verhalten der schrittweisen Ausführung beim LINQ-Debuggen.

Edit and Continue Not Supported for LINQ

Beschreibt das Verhalten, das zu erwarten ist, wenn Sie LINQ-Code während des Debuggens bearbeiten.

Ergebnisse der Betrachtungs-LINQ

Das Ergebnis einer LINQ-Anweisung kann mithilfe von DataTips, über das Überwachungsfenster oder im Dialogfeld Schnellüberwachung angezeigt werden.Bei Verwendung eines Quellcodefensters können Sie den Mauszeiger auf eine Abfrage im Quellcodefenster bewegen, woraufhin ein DataTip eingeblendet wird.Sie können eine LINQ-Variable kopieren und in das Überwachungsfenster oder das Dialogfeld Schnellüberwachung einfügen.

In LINQ wird eine Abfrage nicht ausgewertet, wenn sie erstellt oder deklariert wird, sondern wenn die Abfrage verwendet wird.Deshalb verfügt die Abfrage erst nach der Auswertung über einen Wert.Eine vollständige Beschreibung zum Erstellen und Auswerten von Abfragen finden Sie unter Einführung in LINQ-Abfragen (C#) oder Schreiben der ersten LINQ-Abfrage (Visual Basic).

Um das Ergebnis einer Abfrage anzuzeigen, muss es vom Debugger ausgewertet werden.Diese implizite Auswertung, die beim Anzeigen eines LINQ-Abfrageergebnisses im Debugger erfolgt, hat einige Auswirkungen, die berücksichtigt werden sollten:

  • Jede Auswertung der Abfrage dauert einige Zeit.Das Erweitern des Ergebnisknotens nimmt ebenfalls Zeit in Anspruch.Bei einigen Abfragen kann eine wiederholte Auswertung zu beträchtlichen Leistungseinbußen führen.

  • Die Auswertung einer Abfrage kann dazu führen, dass der Datenwert oder Zustand des Programms geändert wird.Nicht alle Abfragen verfügen über Nebeneffekte.Um festzustellen, ob eine Abfrage ohne Nebeneffekte sicher ausgewertet werden kann, sollten Sie den Code verstehen, durch den die Abfrage implementiert wird.

Bitten und LINQ

Wenn Sie LINQ-Code debuggen, hat die schrittweise Ausführung einige Verhaltensunterschiede Info, die Sie kennen sollten.

Bb385795.collapse_all(de-de,VS.110).gifLINQ to SQL

In LINQ to SQL-Abfragen befindet sich der Prädikatcode außerhalb der Kontrolle des Debuggers.Deshalb können Sie keinen Einzelschritt in den Prädikatcode ausführen.Jede Abfrage, die in eine Ausdrucksbaumstruktur kompiliert wird, generiert Code, der sich außerhalb der Kontrolle des Debuggers befindet.

Bb385795.collapse_all(de-de,VS.110).gifSchrittweise Ausführung in Visual Basic

Wenn der Debugger bei der schrittweisen Ausführung eines Visual Basic-Programms auf eine Abfragedeklaration trifft, wird kein Einzelschritt in die Deklaration ausgeführt, sondern die gesamte Deklaration als einzelne Anweisung hervorgehoben.Dieses Verhalten tritt auf, da die Abfrage erst bei ihrem Aufruf ausgewertet wird.Weitere Informationen hierzu finden Sie unter Einführung in LINQ in Visual Basic.

Wenn Sie den folgenden Beispielcode schrittweise durchlaufen, hebt der Debugger die Abfragedeklaration bzw. Abfrageerstellung als einzelne Anweisung hervor.

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

Beim nächsten Schritt hebt der Debugger For Each cur In x hervor.Im nächsten Schritt führt der Debugger einen Einzelschritt in die MyFunction-Funktion aus.Nach dem schrittweisen Durchlaufen von MyFunction führt der Debugger einen Rücksprung zu Console.WriteLine(cur.ToSting()) aus.Obwohl der Prädikatcode vom Debugger ausgewertet wird, wird zu keinem Zeitpunkt ein Einzelschritt in den Prädikatcode in der Abfragedeklaration ausgeführt.

Bb385795.collapse_all(de-de,VS.110).gifErsetzen eines Prädikats durch eine Funktion, um die schrittweise Ausführung zu ermöglichen (Visual Basic)

Falls Sie Prädikatcode zu Debugzwecken schrittweise durchlaufen müssen, können Sie das Prädikat durch den Aufruf einer Funktion ersetzen, die den ursprünglichen Prädikatcode enthält.Nehmen Sie z. B. an, Sie hätten folgenden Code:

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

Sie können den Prädikatcode in eine neue Funktion mit der Bezeichnung IsEven verschieben:

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

Die überarbeitete Abfrage ruft bei jedem Durchlauf von items die IsEven-Funktion auf.Mithilfe der Debuggerfenster können Sie feststellen, ob die einzelnen Elemente die angegebene Bedingung erfüllen und den Code in IsEven schrittweise ausführen.Das Prädikat in diesem Beispiel ist recht einfach gehalten.Falls Ihr zu debuggendes Prädikat jedoch komplizierter ist, kann diese Technik sehr hilfreich sein.

Bearbeiten und Fortfahren nicht unterstütztes für LINQ

Bearbeiten und Fortfahren unterstützt keine Änderungen an LINQ-Abfragen.Wenn Sie eine LINQ-Anweisung während einer Debugsitzung hinzufügen, entfernen oder ändern, wird ein Dialogfeld mit dem Hinweis eingeblendet, dass die Änderung von Bearbeiten und Fortfahren nicht unterstützt wird.An diesem Punkt können Sie entweder die Änderungen rückgängig machen oder die Debugsitzung beenden und eine neue Sitzung mit dem bearbeiteten Code starten.

Außerdem wird das Ändern des Typs oder Wertes einer in einer LINQ-Anweisung verwendeten Variablen von Bearbeiten und Fortfahren nicht unterstützt.Auch hier können Sie entweder die Änderungen rückgängig machen oder die Debugsitzung beenden und neu starten.

In C# kann Bearbeiten und Fortfahren nicht für Code in einer Methode verwendet werden, die eine LINQ-Abfrage enthält.

In Visual Basic kann Bearbeiten und Fortfahren für Nicht-LINQ-Code verwendet werden, und zwar selbst in einer Methode, die eine LINQ-Abfrage enthält.Sie können Code vor der LINQ-Anweisung sogar dann hinzufügen oder entfernen, wenn sich die Änderungen auf die Zeilennummer der LINQ-Abfrage auswirken.Das Debugverhalten in Visual Basic für Nicht-LINQ-Code bleibt dasselbe wie vor der Einführung von LINQ.Es ist nicht möglich, eine LINQ-Abfrage zu ändern, hinzuzufügen oder zu entfernen, es sei denn, Sie beenden den Debugvorgang, um die Änderungen zu übernehmen.

Siehe auch

Konzepte

Nebeneffekte und Ausdrücke

Ausnahmebehandlung (Debuggen)

Einführung in LINQ-Abfragen (C#)

Einführung in LINQ in Visual Basic

Weitere Ressourcen

Debugging SQL

Vorbereitung zum Debuggen: SQL Server-Projekte