Expressões em C# e F#
O avaliador da expressão gerenciado aceita a maioria das expressões escritas em C#.
O avaliador da expressão gerenciado não reconhece F# expressões, entretanto.Se você estiver depurando F#, você precisará traduzir expressões em sintaxe C# antes de inserir expressões em uma caixa de diálogo ou janela do depurador.Quando você traduzir expressões de F# para C#, não se esqueça que o C# usa o operador = = para testar igualdade, enquanto F# usa = único.
As seções a seguir oferecem informações específicas e discutem alguns dos tipos de expressão que não são suportados ou suporte parcial:
Casts
Dynamic Objects
Identifiers and Types
Method Evaluation
Operators
Overloaded Operators
Property Evaluation
Strings
typeof and sizeof Operators
WebMethods
O avaliador da expressão ignora public, protected, internal, e private modificadores de acesso.Você pode chamar um private método a partir de Watch janela, por exemplo.Como o avaliador da expressão ignora modificadores de acesso, é possível uma carga inesperada ser chamada.
O avaliador da expressão executa todas as avaliações em um contexto seguro implícito, se o código sendo executado é seguro ou não seguro.
O avaliador da expressão também ignora blocos marcados e a /checked opção de compilador.Todas as expressões são avaliadas em um contexto desmarcado.
Você pode personalizar a exibição dos tipos de dados personalizados usando atributos.Para obter mais informações, consulte Exibir tipos de dados personalizados.
Projeções
Expressões de conversão simples funcionam no depurador:
(A)x
Casts que envolvem ponteiros não funcionam no depurador.
Objetos dinâmicos
O avaliador da expressão pode avaliar as variáveis são tipificadas estaticamente como dinâmicos.Ele também pode avaliar os objetos que implementam a interface IDynamicObject.Quando os objetos que implementam a interface IDynamicObject são avaliados no Watch janela, um nó é adicionado no modo dinâmico.O nó de exibição dinâmica mostra membros de objeto, mas não permite editar os valores dos membros.
Os seguintes recursos de objetos dinâmicos não são suportados:
O + = operadores compostos,-=, % = / =, e * =
Muitas conversões, incluindo conversões numéricos e projeções de argumento de tipo
Chamadas de método com mais de dois argumentos
Getters de propriedade com mais de dois argumentos
Setters de propriedade com argumentos
Atribuindo a um indexador
Operadores booleanos && e||
Identificadores e tipos
Expressões de depurador podem usar qualquer identificador visível dentro do escopo atual.Se o depurador é interrompido no método Magh, por exemplo, você pode usar qualquer identificador visível dentro do Magh, incluindo constantes, nomes de variáveis e nomes de método.
O depurador corretamente pode exibir qualquer variável de primitivo, enum ou tipo intrínseco.Para variáveis do tipo de classe, o depurador corretamente exibe o valor com base no tipo mais derivado.Se você tiver um objeto leo do tipo Lion, derivado do tipo Cat, você pode avaliar leo.Claws e obter o valor correto para um objeto do tipo Lion.
Você pode atribuir um novo valor para qualquer expressão que é um valor de l.Isso inclui primitivo, classe, e System.Object tipos.
Método de avaliação
O depurador oferece suporte a avaliação de métodos, incluindo métodos sobrecarregados.Portanto, você pode inserir qualquer uma das expressões a seguir e o depurador chamará a versão correta dos métodos sobrecarregados:
Time.Set();
Time.Set(atime);
Na verdade avaliar um método no depurador chama e executa o código para o método.Se o método tem efeitos colaterais, avaliamos o método em uma janela de depurador alterará o estado de seu programa, que pode produzir resultados inesperados.
Quando você definir um ponto de interrupção em um método sobrecarregado, o local do ponto de interrupção depende como especificar o método.Se você especificar a assinatura completa (nome do método e lista de argumentos completa), o depurador define um ponto de interrupção na sobrecarga especificada.Se você especificar somente o nome do método, comportamento o depurador do depende de um Visual Studio opções de configuração.Se o IntelliSense de usar para verificar o nome de função caixa de seleção não estiver selecionada, o depurador definirá um ponto de interrupção em cada sobrecarga com esse nome do método.Caso contrário, o Choose Breakpoint caixa de diálogo será aberta, permitindo que você especifique qual sobrecarga (s) para colocar o ponto de interrupção.Para mais informações, consulte Como: definir um ponto de interrupção de função.
Não há suporte para a criação de novos métodos anônimos no depurador nesta versão do Visual Studio.
Operadores
O depurador corretamente avalia os operadores mais internos, incluindo:
Relational and equality operators: ( expr1> expr2, expr1< expr2, expr1<= expr2, expr1=> expr2, expr1== expr2, expr1!= expr2).
Boolean operators: (expr1&& expr2, expr1|| expr2, expr1? expr2: expr3).
Arithmetical operators: (expr1+ expr2,expr1- expr2, expr1* expr2, expr1/ expr2, expr1% expr2 ).
Logical operators: (expr1& expr2, expr1^ expr2, expr1| expr2 ).
Shift operators: (expr1>> expr2, expr1<< expr2 ).
Assignment operators: ( lvalue= expr2,lvalue*= expr2,lvalue/= expr2, lvalue%= expr2, lvalue+= expr2, lvalue-= expr2, lvalue<<= expr2, lvalue>>= expr2, lvalue&= expr2, lvalue^= expr2, lvalue|= expr2).
Unary operators: ( +expr1, - expr1, expr1++, ++expr1, expr1--, --expr1).
Operadores sobrecarregados
Mais operadores sobrecarregados funcionam no depurador.
Sobrecarga nos operadores fixos +, -, /, %, e & trabalho:
expr1+ expr2
expr1- expr2
expr1/ expr2
expr1% expr2
expr1& expr2
Sobrecarga nos operadores fixos =, & &, &, e | |, não funcionam:
expr1= expr2
expr1&& expr2
expr1& expr2
expr1|| expr2
Sobrecarga nos operadores fixos << e >> não funcionam se ambos os operandos são variáveis de classe:
objeto1 <<object2
Objeto1>> object2
Sobrecarregado operadores de prefixo +, -, + +, -,!, e ~ funcionam:
+expr1
-expr1
++expr1
--expr1
!expr1
~expr1
Sobrecarregado operadores de sufixo + + e --funcionam:
expr1++
expr1--
Indexadores de sobrecarga funcionam:
- expr1[expr2]
Avaliação de propriedade
O depurador pode avaliar as propriedades em qualquer janela variável.No entanto, avaliar uma propriedade no depurador pode ter efeitos colaterais que produzem resultados inesperados e indesejados.Para proteger contra efeitos colaterais causados por avaliações acidentais, você pode desativar propriedade avaliação na Opções caixa de diálogo.
Cadeias de caracteres
O depurador reconhecerá o operador indexado quando ele é usado com seqüências, bem como matrizes.Assim, por exemplo, você pode inserir:
"hello world"[0]
O Watch janela exibirá o valor correto:
'h'
Em C#, diferentemente C/C++ nativo, você pode editar o valor de uma seqüência no depurador.Além disso, você pode usar o Length operador em uma seqüência:
mystring.Length
- ou -
"hello world".Length
No C#, você pode concatenar seqüências:
"hello" + "world"
Operadores typeof e sizeof
O depurador oferece suporte a typeof e sizeof operador, transformando-o em equivalente .NET Framework função.
typeof ( expression)
é transformada em:
System.Type.GetType( expression)
O depurador depois avalia a expressão transformada.
O depurador oferece suporte a sizeof operador.
WebMethods
Você não é possível chamar WebMethods do depurador windows.