Sdílet prostřednictvím


Ladění LINQ

Visual Studiopodporuje ladění jazyka integrované dotazu kódu (LINQ), s určitými omezeními. Funkce nejvíce ladění pracovat s příkazy jazyka LINQ, včetně krokování, nastavení zarážek a prohlížení výsledků v systému windows ladicí program.Toto téma popisuje hlavní omezení LINQ ladění.

V tomto tématu

Zobrazení výsledků LINQ

Krokování a LINQ

Upravit a pokračovat, není podporováno pro LINQ

Zobrazení výsledků LINQ

Je-li zobrazit výsledek výrazu LINQ, pomocí DataTips, okno kukátka a dialogové okno QuickWatch.Použijete-li okno zdroj, může umístěte ukazatel na dotazu v okně zdroje a popis dat se zobrazí.Můžete zkopírovat LINQ proměnnou a jeho vložením do QuickWatch dialogové okno kukátka nebo.

V technologii LINQ není vyhodnocena dotazu při jeho vytvoření nebo deklarován, ale pouze v případě, že je použit dotaz.Dotaz proto nemá hodnotu, dokud bude vyhodnocena.Úplný popis vytváření dotazu a vyhodnocení, naleznete v části Úvod do dotazů LINQ (C#) nebo Napište svůj první dotaz LINQ (Visual Basic).

Chcete-li zobrazit výsledek dotazu, se musí vyhodnotit ladicí program ji.Toto implicitní hodnocení dochází při zobrazení výsledku dotazu LINQ v ladicí program, má některé efekty, které byste měli zvážit:

  • Každý vyhodnocení dotazu trvá určitou dobu.Rozbalením uzlu výsledky trvá určitou dobu.Pro určité dotazy může způsobit snížení výkonu pozorovatelné opakované hodnocení.

  • Vyzkoušet dotaz může mít za následek vedlejší účinky, které jsou změny hodnoty dat nebo stavu programu.Ne všechny dotazy mít vedlejší účinky.Chcete-li zjistit, zda dotaz může být bezpečně vyhodnocen bez vedlejší účinky, je třeba pochopit kód, který implementuje dotazu.

Krokování a LINQ

Při ladění kódu jazyka LINQ, krokování má určité chování rozdíly, které byste měli vědět o.

Technologie LINQ to SQL

V technologii LINQ to příkazy jazyka SQL predikátu kód je mimo kontrolu ladicí program.Proto je nelze krokovat s vnořením predikátu kódu.Všechny dotazy, kompilovaný strom výrazu vytváří kód, který je mimo kontrolu ladicí program.

Krokování v jazyce Visual Basic

Když jsou krokování programu Visual Basic a ladicí program zaznamená deklaraci dotazu, nikoli Krokovat s vnořením prohlášení, ale označují celý prohlášení jako jediný příkaz.K tomuto chování dochází, protože dotaz není vyhodnocena, dokud se nazývá.Další informace naleznete v tématu Představení technologie LINQ v jazyce Visual Basic.

Je-li krokovat následující příklad kódu, ladicí program se označují prohlášení dotazů nebo vytvoření dotazu jako jediný příkaz.

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

Pokud krok znovu ladicí program se označují For Each cur In x.V dalším kroku krocích do funkce MyFunction.Po krokování MyFunction, jeho přejde zpět na Console.WriteLine(cur.ToSting()).V žádném bodě ji predikátu kód krokovat v dotazu prohlášení, i když ladicí program vyzkoušejte tento kód.

Nahraďte predikátu funkci, kterou chcete povolit krokování (Visual Basic)

Máte-li ke krokování predikátu kódu pro účely ladění, můžete nahradit predikát během volání funkce, která obsahuje původní kód predikátu.Představte si například, že máte tento kód:

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

Predikátu kódu můžete přesunout do nové funkce, volá 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

Revidované dotaz volá funkci IsEven při každém průchodu prostřednictvím items.Můžete použít ladicí program windows zda každá položka nesplňuje zadanou podmínku a můžete krokovat kód v IsEven.Predikát v tomto příkladu je poměrně snadné.Nicméně pokud máte obtížnější predikátu, které máte k ladění, tento postup může být velmi užitečné.

Upravit a pokračovat, není podporováno pro LINQ

Upravit a pokračovat nepodporuje změny LINQ dotazů.Je-li přidat, odebrat nebo změnit příkaz LINQ během relace ladění, zobrazí se dialogové okno informující o tom, že změna nepodporuje upravit a pokračovat.V tomto okamžiku můžete buď vrátit zpět změny nebo zastavení ladicí relace a restartujte novou relaci s upravenou kódem.

Kromě toho upravit a pokračovat nepodporuje změnu typ nebo hodnotu proměnné, která se používá v příkazu jazyka LINQ.Znovu můžete buď vrátit zpět změny nebo zastavit a restartujte relaci ladění.

V jazyce C# nelze použít upravit a pokračovat na jakýkoli kód v metodě, která obsahuje dotazu LINQ.

V jazyce Visual Basic můžete upravit a pokračovat na jiné LINQ kódu, a to i v metodě, která obsahuje dotazu LINQ.Můžete přidat nebo odebrat kód před příkazem LINQ, i v případě, že změny se projeví číslo řádku dotazu LINQ.V jazyce Visual Basic ladění prostředí pro jiné LINQ kód zůstane stejný, jaký byl před LINQ byla zavedena.Nelze změnit, přidat nebo odebrat dotazu LINQ, však, pokud chcete ukončit ladění změny se projeví.

Viz také

Koncepty

Vedlejší efekty a výrazy

Zpracování výjimek (ladění)

Úvod do dotazů LINQ (C#)

Představení technologie LINQ v jazyce Visual Basic

Další zdroje

Debugging SQL