Expressões no Visual Basic
O avaliador de expressão gerenciado aceita a maioria das expressões gravadas no Visual Basic. Na janela Imediato, o avaliador de expressão somente aceita instruções de linha única.
As seções a seguir oferecem informações específicas e discutem alguns dos tipos de expressão que não têm suporte ou que são parcialmente suportados:
Conversões
Objetos dinâmicos
Avaliação da função
Identificadores e tipos
Aliases de importação
Variáveis de objeto que contêm tipos intrínsecos
Operadores
PropertyEvaluation
Cadeias de caracteres
Operador TypeOf
Palavras-chave sem suporte
Declarações de variável
WebMethods
O Visual Basic não dá suporte a regras autoexpandir para exibir o conteúdo de um tipo de dado em formato significativo. Para obter mais informações, consulte Exibir elementos de tipos de dados personalizados.
Conversões
Conversões simples funcionam no depurador:
A = CStr(B)
Objetos dinâmicos
O avaliador de expressão pode avaliar as variáveis estaticamente tipadas como dinâmicas. Também pode avaliar os objetos que implementam a interface IDynamicObject. Quando os objetos que implementam a interface IDynamicObject são avaliados na janela Inspeção, um nó do Modo de Exibição Dinâmico é adicionado. O nó do Modo de Exibição Dinâmico exibe membros do objeto, mas não permite editar os valores dos membros.
Os seguintes recursos de objetos dinâmicos não têm suporte:
Os operadores compostos +=, -=, %=, /=, e *=
Várias conversões, inclusive conversões numéricas e conversões de tipo de argumento
Chamadas de método com mais de dois argumentos
Getters da propriedade com mais de dois argumentos
Setters de propriedade com argumentos
Atribuição a um indexador
Os operadores boolianos && e ||
Avaliação da função
O depurador oferece suporte à avaliação das funções, incluindo funções sobrecarregadas. Em virtude disso, você pode digitar qualquer uma das seguintes expressões e o depurador chamará a versão correta da função sobrecarregada:
myFunction (param1)
myFunction (param1, param2)
Avaliar uma função no depurador chama e executa o código da função. Se a função tiver efeitos colaterais, como a alocação de memória ou alteração do valor de uma variável global, avaliar a função em uma janela do depurador modificará o estado do programa, o que poderá produzir resultados inesperados.
Quando você define um ponto de interrupção em uma função sobrecarregada, o local do ponto de interrupção depende de como você especifica a função. Se você especificar apenas o nome da função, o depurador definirá um ponto de interrupção em cada sobrecarga desse nome de função. Se você especificar a assinatura completa, o nome da função e a lista de argumentos completa, o depurador definirá um ponto de interrupção na sobrecarga especificada.
Identificadores e tipos
As expressões do depurador podem usar qualquer identificador visível no escopo atual. Se o depurador for interrompido na função Magh, por exemplo, você poderá usar a maioria dos identificadores visíveis dentro de Magh, incluindo nomes de variável e nomes de função. As constantes locais não têm suporte. Você pode definir o valor de qualquer variável visível no escopo atual.
O depurador pode exibir corretamente qualquer variável de um primitivo ou tipo intrínseco. Para variáveis do tipo de classe, o depurador exibe corretamente o valor com base no tipo mais derivado. Se você tiver um objeto leo do tipo Lion, derivado do tipo Cat, você poderá avaliar leo.Clawlength e obter o valor correto para um objeto de tipo Lion.
Aliases de importação
Você não pode usar aliases de importação nas janelas do depurador.
Variáveis de objeto que contêm tipos intrínsecos
As variáveis de objeto que contêm tipos de variáveis intrínsecos, como inteiro, são exibidos e editados de um modo que pode parecer não intuitivo. Por exemplo, suponhamos que seu código-fonte contenha a variável do objeto como esta:
Dim obj As Object = 5
A janela Inspeção mostra o valor da variável obj como:
5 {Integer}
Para alterar o valor dessa variável para 6, você deveria inserir:
6
Você não deveria inserir:
6 {Integer}
Depois que você editar o valor, observará que o depurador adicionará {Integer} para você.
Operadores
O depurador avalia corretamente a maioria dos operadores, incluindo:
Operadores aritméticos: ( expr1+ expr2, expr1- expr2, expr1* expr2, expr1/ expr2, expr1\expr2, expr1^expr2, expr1Modexpr2 ).
Operadores de atribuição: ( var1= expr2, var1^= expr2, var1*= expr2, var1/= expr2, var1\= expr2, var1+= expr2, var1-= expr2, var1&= expr2).
Operadores de comparação: (expr2< expr2, expr2<= expr2, expr1> expr2, expr1>= expr2, expr1= expr2, expr1<> expr2).
Operadores de concatenação: (expr1& expr2, expr1+ expr2).
Operadores lógicos: (expr1And expr2, expr1Or expr2, expr1XOr expr2, expr1AndAlso expr2, expr1OrElse expr2, Notexpr1).
Operadores unários: ( - expr1, Not expr1, GetType (type) ).
Avaliação de propriedade
O depurador pode avaliar propriedades em qualquer janela variável. No entanto, avaliar uma propriedade no depurador pode ter efeitos colaterais, como, por exemplo, alterar os valores de variáveis, que afetam os resultados do programa. Para proteger contra efeitos colaterais causados pela avaliação acidental, você pode desativar a avaliação da propriedade da caixa de diálogo Geral, Depuração, Opções.
Cadeias de caracteres
No Visual Basic, você pode usar o operador Length em uma cadeia de caracteres:
mystring.Length
-ou-
"hello world".Length
Operador TypeOf
No Visual Basic, você pode usar o operador TypeOf nas janelas do depurador:
TypeOf expression Is type
Por exemplo,
TypeOf Me Is Integer
exibe o valor false.
Se você usar TypeOf, isso deverá ser parte de uma expressão que use Is. Se você usar TypeOf sem Is, receberá a seguinte mensagem de erro:
Is required
Palavras-chave sem suporte
As seguintes palavras-chave do Visual Basic não têm suporte em expressões da janela do depurador:
AddressOf
End
Error
Exit
Goto
On Error
Return
Resume
Select/Case
Stop
SyncLock
Throw
Try/Catch/Finally
With
Além disso, nenhum namespace ou palavra-chave do nível do módulo, como, por exemplo, End Sub ou Module, tem suporte.
Declarações de variável
Você não pode declarar novas variáveis explícitas nas janelas do depurador.
No entanto, você pode atribuir a uma variável implícita na janela Imediato. Essas variáveis implícitas têm escopo no depurador e não estão acessíveis fora do depurador. Por exemplo, a instrução o = 5 criará implicitamente uma nova variável o e atribuirá o valor 5. Essas variáveis implícitas são do tipo Object a menos que o tipo possa ser inferido pelo depurador.
WebMethods
Você não pode chamar WebMethods das janelas do depurador.