Compartilhar via


Recursos do avaliador de expressão comum

Este tópico descreve vários recursos do Avaliador de Expressão que são comuns ao depurador, variando somente o idioma.

Variáveis implícitas

No Visual Basic e no C#, você pode criar variáveis implícitas usando o avaliador de expressão. Essas variáveis implícitas nunca saem do escopo e podem ser tratadas como qualquer outra variável.

No C#, você pode criar uma variável implícita declarando-a no avaliador de expressão. Por exemplo, você pode digitar o seguinte código em C# na janela Imediato:

int b = 100;

Quando você executar esse código na janela Imediato, a nova variável implícita aparecerá na janela Locais com o sinal $ na frente do nome da variável, nesse caso, $b.

No Visual Basic, você não pode declarar variáveis implícitas no avaliador de expressão. No entanto, se você usar uma variável não declarada no avaliador de expressão do Visual Basic, uma variável implícita será criada automaticamente. No Visual Basic, as variáveis implícitas não são listados na janela Locais.

Pontos de interrupção

Se você usar a janela Imediato para avaliar um método do Visual Basic ou do C# ou uma função que contém um ponto de interrupção, esse ponto de interrupção será alcançado e um novo quadro será exibido na Pilha de Chamadas. Vejamos um exemplo C#:

    class Program
    {
        static void Main(string[] args)
        {
// Breakpoint here:
             int a = 20;
         }
    }

Se você definir um ponto de interrupção em que o comentário indica, compila e executa o programa pressionando F5, você alcançará o ponto de interrupção de uma maneira normal. Se você avaliar o método Main digitando Program.Main(null) na janela Imediato, o ponto de interrupção será alcançado uma segunda vez, e haverá uma entrada para o método em Pilha de chamadas.

Avaliação na Janela de Inspeção

Para evitar possíveis efeitos colaterais indesejáveis, uma chamada de função ou de método não será avaliada automaticamente toda vez que o depurador funcionar. Em vez disso, um ícone permitirá atualizar manualmente o resultado. Ele aparece na coluna Valor. Isso permite que você avalie manualmente a chamada. Para obter mais informações, consulte Efeitos colaterais e expressões.

Identidade do objeto

Esse recurso não está disponível para o Visual Basic.

Alguns aplicativos criam muitas instâncias de uma classe. Nesses aplicativos, geralmente é útil ter um identificador para distinguir uma determinada instância da classe. Isso pode ser útil, por exemplo, se uma instância específica da classe não está se comportando conforme esperado ou uma instância específica foi inserida mais de uma vez em uma coleção que deveria contê-la apenas uma vez.

Identidade do objeto nativo

Quando você depura um código não gerenciado, você pode identificar um objeto usando seu endereço. Isso é importante por duas razões:

  • Você pode rastrear um objeto apenas por seu endereço. Isso inclui a capacidade de usar um endereço para:

    • Exibir o valor do objeto nesse endereço.

    • Verificar a igualdade. Frequentemente, o endereço de um objeto pode ser usado da mesma maneira que a própria variável do objeto.

  • Você pode usar o endereço de um objeto, a instância, para definir um ponto de interrupção em um método naquela instância específica.

    Por exemplo, suponha que você tenha um objeto que é uma instância da classe CMyType, com endereço 0xcccccccc. Você pode especificar um ponto de interrupção da função no método aMethod daquela instância como segue:

    ((CMyType *) 0xcccccccc)->aMethod

Identidade do objeto gerenciado

Com o código gerenciado, você não pode usar o endereço do objeto para identificá-lo. Em vez disso, você usa um inteiro conhecido como a ID de objeto gerada pelos serviços de depuração Common Language Runtime (CLR) e associado ao objeto. Este número é um inteiro positivo gerado pelos serviços de depuração CLR. O valor da ID do objeto não tem nenhum significado exceto para identificar exclusivamente o objeto.

Os identificadores de objeto são exibidos como inteiros decimais de comprimento variável com o sinal de número (#) anexado após o número sem zeros à esquerda, como 5#. Os identificadores aparecem na coluna Valor em janelas de dados do depurador diferentes.

Para criar uma ID de objeto para uma variável, clique com o botão direito do mouse na variável e selecione Criar ID de Objeto. O depurador exibirá um número com o sinal numérico (#) anexado depois dele, como em 123#. Para excluir uma ID de objeto, clique com o botão direito do mouse na variável e selecione Excluir ID de Objeto.

Quando um ponto de interrupção for alcançado, você poderá digitar o identificador de uma variável na janela de Inspeção. O depurador exibe o valor da ID de objeto, e você pode expandi-la e inspecioná-la como qualquer outra variável.

Você pode usar a ID do objeto para definir um ponto de interrupção em um método de uma instância específica. Por exemplo, suponha que você tenha um objeto que seja uma instância da classe CMyType, e a instância tem a ID do objeto 5#. A classe CMyType inclui um método aMethod. Você pode definir um ponto de interrupção da função no método aMethod da instância 5#, como segue:

((CMyType) 5#).aMethod

Você também pode usar a ID do objeto em uma condição de ponto de interrupção. O exemplo a seguir exibe como você pode testar a ID do objeto em uma condição.

this == 5#

Consulte também

Conceitos

Exibindo dados no depurador

Pontos de interrupção: usar contagens de ocorrências, funções da pilha de chamadas e condições para interromper quando e onde você quiser no Depurador do Microsoft Visual Studio

Outros recursos

Expressões no depurador

Mapa de depurador