Ladění LINQ
Visual Studiopodporuje integrované ladění jazyka dotazu (LINQ) kód s určitými omezeními. Většina ladění pracovat s příkazy LINQ včetně krokování, nastavení zarážek a zobrazení výsledků v ladicí program systému windows.Toto téma popisuje hlavní omezení LINQ ladění.
V tomto tématu
Popisuje zvláštní okolnosti při zobrazení výsledků dotazu LINQ v debuggeru. |
|
Vysvětluje taktování chování při ladění LINQ. |
|
Vysvětluje chování lze očekávat, že viz zkuste upravit kód LINQ ladíte. |
Zobrazení výsledků LINQ
Výsledek příkazu LINQ můžete zobrazit pomocí dialogového okna QuickWatch, DataTips a okno kukátka.Při použití zdroje okno ponecháte ukazatel na dotazu v okně zdroj, zobrazí DataTip.Můžete kopírovat LINQ proměnné a vložit do okna kukátka nebo dialogové okno QuickWatch.
LINQ, v dotazu nebudou vyhodnoceny při vytvoření nebo deklarovaná, ale pouze v případě, že dotaz používá.Dotaz tedy nemá hodnotu, dokud je vyhodnocen.Úplný popis vytvoření dotazu a hodnocení viz Úvod do LINQ dotazy (C#) nebo Psaní prvního LINQ dotazu (Visual Basic).
Chcete-li zobrazit výsledek dotazu musí vyhodnotit ladicí program ji.Toto implicitní hodnocení dochází při zobrazení výsledků dotazu LINQ v debuggeru, má některé efekty, je třeba zvážit:
Každé hodnocení dotazu trvá.Rozbalení uzlu výsledky trvá.Pro některé dotazy opakované hodnocení může způsobit znatelné penalizace.
Vyhodnocení dotazu může mít za následek vedlejší účinky, které jsou změny hodnoty dat nebo stavu aplikace.Všechny dotazy mají vedlejší účinky.Chcete-li zjistit, zda dotaz může bezpečně vyhodnocen bez vedlejší účinky, musí porozumět kód, který implementuje dotazu.
Stepping a LINQ
Při ladění kódu LINQ krokování má některé behaviorální rozdíly, které byste měli vědět.
LINQ to SQL
LINQ dotazů SQL v predikátu kód je mimo kontrolu ladicí program.Proto nelze krok do kódu predikátu.Vytvoří dotaz, který se kompiluje ke stromu výraz kód, který je mimo kontrolu ladicí program.
Krokování v jazyce Visual Basic
Program Visual Basic jsou krokování a debugger nalezne prohlášení dotaz, není krok do prohlášení však zvýrazní celou prohlášení jako jediné prohlášení.K tomuto chování dochází, protože dotaz není vyhodnocena, dokud se nazývá.Další informace naleznete v tématu Úvod do jazyka Visual Basic LINQ.
Pokud krocích následující příklad kódu debugger zvýrazní dotazu prohlášení nebo vytváření dotazu jako jediné prohlášení.
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
Při kroku znovu zvýrazní ladicí program For Each cur In x.V dalším kroku kroky do funkce MyFunction.Po krokování MyFunction, jeho přejde zpět na Console.WriteLine(cur.ToSting()).V žádném bodě jej predikátu kód krokovat v prohlášení dotazu, ačkoli ladicí program vyhodnotí tento kód.
Nahrazení predikát funkce povolit taktování (Visual Basic)
Pokud chcete-li krokovat kód predikátu pro účely ladění, můžete nahradit predikátu volání funkce, která obsahuje původní kód predikátu.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
Predikátu kódu můžete přesunout do nové funkce 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
Upravený dotaz volá funkci IsEven na každém průchodu přes items.Ladicí program systému windows můžete použít zda každé položky splňuje zadanou podmínku a krokovat kód v IsEven.Predikát v tomto příkladu je poměrně jednoduchý.Však máte obtížnější predikát, který máte k ladění, může být tato technika velmi užitečné.
Upravit a nadále není podporována pro LINQ
Úpravy a pokračovat nepodporuje změny LINQ dotazy.Je-li přidat, odebrat nebo změnit příkaz LINQ během relace ladění, zobrazí se dialogové okno s upozorněním, že změna nepodporuje úpravy a pokračovat.V tomto okamžiku můžete buď vrátit zpět změny nebo ukončit relaci ladění a znovu spusťte novou relaci s upravenou kód.
Dále upravovat a pokračovat nepodporuje změnu typu nebo hodnotu proměnné, která se používá v příkazu LINQ.Znovu můžete vrátit zpět změny nebo zastavit a restartovat ladicí relace.
V jazyce C# nelze použít na libovolný kód v metodě, která obsahuje LINQ dotazu upravit a pokračovat.
V jazyce Visual Basic můžete upravit a pokračovat bez LINQ kódu i v metodu, která obsahuje LINQ dotaz.Můžete přidat nebo odebrat kód před příkaz LINQ, i v případě, že změny ovlivní číslo řádku LINQ dotazu.Jazyka Visual Basic ladění kódu než LINQ zkušenosti zůstává stejný, jako byl před LINQ byla zavedena.Nelze změnit, přidat nebo odebrat LINQ dotazu však, pokud chcete zastavit ladění aplikujte změny.
Viz také
Koncepty
Úvod do jazyka Visual Basic LINQ