Compartilhar via


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.

Viewing LINQ Results

Descreve circunstâncias especiais a serem considerados quando você exibir os resultados da consulta LINQ no depurador.

Stepping and LINQ

Explica o comportamento de revisão durante a depuração do LINQ.

Edit and Continue Not Supported for 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.

Bb385795.collapse_all(pt-br,VS.110).gifLINQ 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.

Bb385795.collapse_all(pt-br,VS.110).gifRevisã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.

Bb385795.collapse_all(pt-br,VS.110).gifSubstituindo 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

Outros recursos

Debugging SQL

Preparação para depuração: Projetos de SQL Server