So debuggen Sie eine LINQ-Anweisung
Ich habe ein Linq to objects-Anweisung
var confirm = from l in lines.Lines
where (l.LineNumber == startline.LineNumber) || (l.LineNumber == endline.LineNumber)
select l;
Bestätigen-Objekt ist wieder ein Objekt Null ist oder Nicht, Einen Verweis' auf dem System.Linq -.Enumerable.WhereListIterator`1.MoveNext()
Wenn das Ergebnis der Abfrage leer war, würde es nur wieder eine leere Auflistung. Ich weiß, für eine Tatsache, dass es keine null-Objekte in der Erklärung. Ist es möglich, Schritt durch die LINQ-Anweisung, um zu sehen, wo es Umfallen?
BEARBEITEN, Wenn ich sagte ich weiß, für eine Tatsache, dass es keine null-Objekte es stellt sich heraus, ich lag :[, aber die Frage bleibt, aber ich bin asuming die Antwort 'Sie können nicht wirklich'
LINQPad ist eine gute Idee, ich benutzte es, um mir beibringen, LINQ, aber ich kann beginnen, es wieder als eine debug - /Schrägstrich-und-brennen-Stil-tool
InformationsquelleAutor der Frage johnc | 2008-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob es möglich Debuggen von VS, aber ich finde LINQPad ganz nützlich. Es lasse Sie dump werden die Ergebnisse für jeden Teil der LINQ-Abfrage.
InformationsquelleAutor der Antwort OwenP
Ja, es ist in der Tat möglich, die Ausführung anhalten auf halbem Weg durch eine linq-Abfrage.
Konvertieren Sie Ihre linq-Abfrage Stil mit lambda-Ausdrücke und setzen Sie eine Select-Anweisung zurückgibt, die sich irgendwo nach dem Punkt in der linq, den Sie Debuggen möchten. Einige Beispiel-code wird es klarer -
Dann kommentieren Sie die kommentierten Zeilen. Stellen Sie sicher, dass die {return i;} auf einer eigenen Zeile und fügen Sie eine debug-Punkt dort. Sie können diese Auswahl jederzeit in Ihrem langen, komplizierten linq-Abfrage.
InformationsquelleAutor der Antwort
Sollten Sie in der Lage sein, um einen Haltepunkt auf die expression in der
where
- Klausel der LINQ-Anweisung.In diesem Beispiel, setzen Sie den cursor irgendwo im folgenden code-Abschnitt:
Drücken Sie dann F9 oder verwenden Sie das Menü oder Kontext Menü, um den Haltepunkt.
Wenn richtig eingestellt, nur der obige code sollte der Haltepunkt Formatierung im editor, anstatt das gesamte LINQ-Anweisung. Sie können auch in der breakpoints-Fenster zu sehen.
Wenn Sie festgelegt haben, kann es richtig, Sie Stoppt jedesmal bei der die Funktion implementiert, dass das oben-Teil der Abfrage.
InformationsquelleAutor der Antwort
Schrieb ich einen umfangreichen Artikel Adressierung dieser Frage veröffentlicht Simple-Talk.com (LINQ-Geheimnisse Aufgedeckt: die Verkettung und Debugging) im Jahr 2010:
Rede ich LINQPad (wie bereits erwähnt von OwenP) als ein großes Werkzeug externe zu Visual Studio. Achten Sie insbesondere auf seine außergewöhnliche Dump () - Methode. Sie können injizieren, diese an einem oder mehreren Punkten in einer LINQ-Kette, um Ihre Daten visualisiert in einem erstaunlich sauberen und klaren Art und Weise. Obwohl sehr nützlich, LINQPad ist extern in Visual Studio. Also ich habe auch mehrere Techniken zur Nutzung innerhalb Visual Studio, denn manchmal ist es einfach nicht praktikabel zu migrieren, ein Stück code, über LINQPad:
(1) Injizieren Aufrufe der Dump () - Methode, den ich in meinem Artikel zur Protokollierung zulassen. Angefangen habe ich mit Bart De Smet ' s Watch () - Methode in seinem informativen Artikel LINQ to Objects – Debugging und einige zusätzliche Kennzeichnung und Einfärbung zur Verbesserung der Visualisierung, aber immer noch verblasst es im Vergleich zu LINQPad die Dump-Ausgabe.
(2) LINQPad ist die Visualisierung direkt in Visual Studio mit Robert Ivanc ist LINQPad Visualizer add-in. Nicht sicher, ob es durch meine stupsen :-), aber die paar Unannehmlichkeiten anwesend, wenn ich Schreibe meine Artikel haben jetzt alle schon bewundernswert, adressiert in der aktuellen Version. Es hat die volle VS2010 unterstützt und lässt Sie untersuchen Sie jedes Objekt, das Sie wie beim Debuggen.
(3) Einbetten der nop-Anweisungen in der Mitte des LINQ-Kette, so können Sie Haltepunkte festlegen, wie zuvor beschrieben, durch einen Erstaunlichen Pete.
2016.12.01 Update
Und ich schrieb die Fortsetzung zu dem obigen Artikel, mit dem Titel einfach LINQ-Debugging und Visualisierung, die zeigt, dass wahre LINQ-debugging-Funktion ist endlich angekommen in Visual Studio 2015 mit dem über-zu-sein-released neues feature in OzCode. @Dror Antwort auf diese Frage zeigt einen kleinen Einblick, aber ich möchte Sie ermutigen, Lesen Sie meinen neuen Artikel für ein ausführliches "how to". (Und ich nicht Arbeit für OzCode.:-)
InformationsquelleAutor der Antwort Michael Sorens
Überprüfen Sie die Ausnahme-stack-trace und siehe das Letzte bit des Codes ausgeführt.
InformationsquelleAutor der Antwort Judah Himango
Vom Aussehen die Fehler, die ich würde vorschlagen, Sie nehmen einen Blick an der Linie.Linien und stellen Sie sicher, Ihre enumerator ordnungsgemäß implementiert ist. Ich denke, es ist die Rückkehr einer null, wenn es nicht sollte.
Oh, und just stellen Sie sicher, dass die Zeile und Zeile.Linien-Objekte nicht null oder Rückgabe von null-Werten als gut.
InformationsquelleAutor der Antwort ljs
[Disclaimer: ich arbeite bei OzCode]
Das problem mit LINQ ist, dass es schwer bis unmöglich zu Debuggen - auch wenn es um einfache Abfragen ein Entwickler ist gezwungen, umgestalten, seine/Ihre Abfrage zu einer Reihe von foreach-Schleifen, oder verwenden Sie die Protokollierung.
LINQ-debugging unterstützt, in einer bald-zu-sein-version von OzCode (aktuell in einer Early-Access-Vorschau) und es hilft Entwicklern dabei, bohren Sie in Ihre LINQ-code ab und zu lokalisieren, die schwer zu fangen der Ausnahmen in Abfragen
Dies ist, was deine Abfrage Aussehen würde in OzCode:
InformationsquelleAutor der Antwort Dror Helper
Ist es möglich, Schritt innerhalb der LINQ-Ausdruck ohne irgendwelche temporären Haltepunkten. Sie brauchen, um Schritt in der Funktion, die wertet der LINQ-Ausdruck, z.B.:
InformationsquelleAutor der Antwort user1414213562