Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Visual Studio podporuje ladění kódu LINQ (Language Integrated Query) s určitými omezeními. Většina funkcí ladění funguje s příkazy LINQ, včetně krokování, nastavení zarážek a zobrazení výsledků v oknech ladicího programu. Toto téma popisuje hlavní omezení ladění LINQ.
Zobrazení výsledků LINQ
Výsledek příkazu LINQ můžete zobrazit pomocí datových popisů, okna Kukátko a dialogového okna QuickWatch. Když použijete zdrojové okno, můžete ukazatel na dotazu pozastavit v okně zdroje a zobrazí se popis dat. Proměnnou LINQ můžete zkopírovat a vložit ji do sledovacího okna nebo do dialogového okna rychlého sledování.
V LINQ se dotaz nevyhodnocuje při vytváření nebo deklaraci, ale pouze při použití dotazu. Dotaz proto nemá hodnotu, dokud se nevyhodnotí. Úplný popis vytváření a vyhodnocování dotazů najdete v tématu Úvod k dotazům LINQ (C#) nebo psaní prvního dotazu LINQ.
Aby se zobrazil výsledek dotazu, musí ho ladicí program vyhodnotit. Toto implicitní vyhodnocení, ke kterému dochází při zobrazení výsledku dotazu LINQ v ladicím programu, má několik efektů, které byste měli zvážit:
Každé vyhodnocení dotazu nějakou dobu trvá. Rozšíření uzlu výsledků nějakou dobu trvá. U některých dotazů může opakované vyhodnocení vést k výraznému snížení výkonu.
Vyhodnocení dotazu může mít za následek vedlejší účinky, které změní hodnotu dat nebo stav vašeho programu. Ne všechny dotazy mají vedlejší účinky. Pokud chcete zjistit, jestli se dotaz může bezpečně vyhodnotit bez vedlejších účinků, musíte pochopit kód, který dotaz implementuje.
Krokování a LINQ
Při ladění kódu LINQ má krokování určité rozdíly chování, o kterých byste měli vědět.
LINQ to SQL
V dotazech LINQ to SQL je predikátový kód mimo kontrolu ladicího programu. Proto nelze krokovat do predikátu kódu. Jakýkoli dotaz, který se zkompiluje do stromu výrazů, vytvoří kód, který je nad kontrolou ladicího programu.
Krokování ve Visual Basicu
Když procházíte program jazyka Visual Basic a ladicí program narazí na deklaraci dotazu, nezakročí do deklarace, ale zvýrazní celou deklaraci jako jediný příkaz. K tomuto chování dochází, protože dotaz není vyhodnocen, dokud není zavolán. Další informace naleznete v tématu Úvod do LINQ v jazyce Visual Basic.
Pokud projdete následující ukázkový kód, ladicí program zvýrazní deklaraci dotazu nebo vytvoření dotazu jako jeden 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
Když znovu vykročíte, ladicí program zvýrazní For Each cur In x. V dalším kroku přejde do funkce MyFunction. Po procházení MyFunctionse vrátí zpět na Console.WriteLine(cur.ToSting()). V žádném okamžiku neprojde kód predikátu v rámci deklarace dotazu, i když ladicí program tento kód vyhodnotí.
Nahrazení predikátu funkcí pro povolení krokování (Visual Basic)
Pokud potřebujete projít predikát kódu pro účely ladění, můžete predikát nahradit voláním funkce, která obsahuje původní predikát kódu. Předpokládejme 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
Kód predikátu můžete přesunout do nové funkce, která se nazývá 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
Přepracovaný dotaz volá funkci IsEven při každém průchodu items. Pomocí oken ladicího programu můžete zjistit, zda každá položka splňuje zadanou podmínku, a můžete procházet kód v IsEven. Predikát v tomto příkladu je poměrně jednoduchý. Pokud ale máte složitější predikát, který musíte ladit, může být tato technika velmi užitečná.
Funkce Upravit a pokračovat se nepodporuje pro LINQ
Funkce Upravit a pokračovat podporuje změny dotazů LINQ s omezeními. Podrobnosti viz Podporované změny EnC
Související obsah
- Ladění SQL
- správa výjimek pomocí ladicího programu
- Úvod do dotazů LINQ (C#)
- Úvod do LINQ v jazyce Visual Basic