Depuração LINQ
Visual Studiooferece suporte a depuração da linguagem integrada de consulta código (LINQ), com algumas limitações. Recursos de depuração mais trabalham com instruções de LINQ, incluindo revisão, definir pontos de interrupção e exibindo os resultados nas janelas depurador.Este tópico descreve as principais limitações de depuração do LINQ.
Neste tópico.
Descreve circunstâncias especiais a serem considerados quando você exibir os resultados da consulta LINQ no depurador. |
|
Explica o comportamento de revisão durante a depuração do LINQ. |
|
Explica o comportamento que você pode esperar para ver se você tentar editar o código do LINQ enquanto você está depurando. |
Exibindo resultados LINQ
Você pode exibir o resultado de uma instrução LINQ usando DataTips, a janela de inspeção e a caixa de diálogo QuickWatch.Quando você usar uma janela de origem, você pode pausar o ponteiro em uma consulta na janela de origem e um DataTip será exibida.Você pode copiar uma variável LINQ e colá-lo na janela Watch ou na caixa de diálogo QuickWatch.
Em LINQ, uma consulta não é avaliada quando ele é criado ou declarado, mas somente quando a consulta é usada.Portanto, a consulta não tem um valor até que ela seja avaliada.Para obter uma descrição completa de avaliação e criação de consulta, consulte Introdução às consultas do LINQ (C#) ou Gravando a primeira consulta LINQ (Visual Basic).
Para exibir o resultado de uma consulta, o depurador deve avaliá-lo.Esta avaliação implícita, que ocorre quando você exibir o resultado de uma consulta LINQ no depurador, tem alguns efeitos que você deve considerar:
Cada avaliação da consulta leva tempo.Expandindo o nó resultados leva tempo.Para algumas consultas, avaliação repetida pode resultar em uma penalidade de desempenho notável.
Avaliar uma consulta pode resultar em efeitos colaterais, que são alterações no valor dos dados ou o estado de seu programa.Nem todas as consultas têm efeitos colaterais.Para determinar se uma consulta pode ser avaliada com segurança sem efeitos colaterais, você deve compreender o código que implementa a consulta.
Stepping e LINQ
Quando você está depurando código LINQ, revisão possui algumas diferenças de comportamento que você deve conhecer.
LINQ para SQL
Na LINQ to SQL consultas, o código de predicado está além do controle do depurador.Portanto, você não pode percorrer o código de predicado.Qualquer consulta que compila para uma árvore de expressão produz um código que está fora do controle do depurador.
Revisão de Visual Basic
Quando você está pulando através de um programa de Visual Basic e o depurador encontrar uma declaração de consulta, não entrar a declaração mas realça a declaração inteira como uma única instrução.Esse comportamento ocorre porque a consulta não é avaliada até que seja chamado.Para mais informações, consulte Introdução ao LINQ em Visual Basic.
Se você percorrer o código de exemplo a seguir, o depurador realça a declaração de consulta ou criação da consulta, como uma única instrução.
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
Quando você entrar novamente, o depurador realça For Each cur In x.Na próxima etapa, etapas para a função MyFunction.Depois passando por MyFunction, ele salta para Console.WriteLine(cur.ToSting()).Em nenhum momento ele percorrer o predicado código na declaração de consulta, embora o depurador avaliar esse código.
Substituindo um predicado com uma função para ativar revisão (Visual Basic)
Se você tiver para percorrer o código de predicado para fins de depuração, você pode substituir o predicado por uma chamada para uma função que contém o código de predicado original.Por exemplo, suponha que você tenha este código:
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
Você pode mover o código de predicado para uma nova função chamada 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
A consulta revisada chama a função IsEven em cada passagem do items.Você pode usar as janelas do depurador para ver se cada item atende a condição especificada, e você pode percorrer o código de IsEven.O predicado neste exemplo é bem simple.No entanto, se você tiver um predicado mais difícil que ter depurar, essa técnica pode ser muito útil.
Editar e continuar não oferece suporte para LINQ
Editar e continuar não suportam alterações para consultas LINQ.Se você adicionar, remove ou alterar uma instrução LINQ durante uma sessão de depuração, aparece uma caixa de diálogo que informa que a alteração não é suportada pelo Edit and Continue.Nesse ponto, você pode desfazer as alterações ou parar a sessão de depuração e reiniciar uma nova sessão com o código editado.
Além disso, editar e continuar não dá suporte para alterar o tipo ou valor de uma variável usada em uma instrução de LINQ.Novamente, você pode desfazer as alterações ou parar e reiniciar a sessão de depuração.
Em C#, é possível usar o Editar e continuar em qualquer código em um método que contém uma consulta LINQ.
Visual Basic, você pode usar edição e continuação código LINQ não, mesmo em um método que contém uma consulta LINQ.Você pode adicionar ou remover o código antes da instrução LINQ, mesmo se as alterações afetam o número de linha de consulta LINQ.O Visual Basic depuração experiência para o código do LINQ não permanece o mesmo como era antes de LINQ foi introduzido.Você não pode alterar, adicionar ou remover uma consulta LINQ, no entanto, a menos que você deseja parar a depuração para aplicar as alterações.
Consulte também
Conceitos
Efeitos colaterais e expressões
(Depuração) de manipulação de exceção
Introdução às consultas do LINQ (C#)
Introdução ao LINQ em Visual Basic