Erro de manipulação no Visual Basic .NET ou no Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 311326
Sumário
Este artigo descreve as opções para tratamento de exceções no Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005.
Mais Informações
Visual Basic .NET ou Visual Basic 2005 oferece suporte a duas maneiras diferentes para impedir que um erro inesperado ao encerrar um aplicativo: tratamento de erros não estruturado e tratamento de erros estruturada. Esses eventos são erros de tempo de execução--também chamados de exceções--respostas às condições anormais ou excepcionais causados pela execução de um bloco de código.

Tratamento de erros não estruturado é o nome que é usado no Visual Basic .NET ou Visual Basic 2005 para fazer referência ao erro de manipulação de método que é usado no Microsoft Visual Basic 6.0. Tratamento de erros estruturado é introduzido pela primeira vez para programadores de Visual Basic no .NET e é realizado usando a instrução Try... Catch... Finally , que sempre foi um recurso de outras linguagens de programação. Tratamento de erros estruturada introduz uma maneira mais simples para criar e manter programas com manipuladores de erro robustos e abrangentes.

Embora Visual Basic .NET ou Visual Basic 2005 ofereça suporte a ambos os métodos, os métodos não podem ser implementados simultaneamente no mesmo procedimento. A única exceção é a instrução erro , que pode ser usada no tratamento de erros estruturada. É recomendável que todos os erros manipulação no Visual Basic .NET ou Visual Basic 2005 ser executadas com tratamento de erros estruturada. Tratamento de erros não estruturado pode prejudicar o desempenho do aplicativo e resultar em código que é difícil para depurar e manter.

No caso de um erro de tempo de execução, ambos os métodos de tratamento de erro procure por um manipulador de erro local que é definido em um determinado bloco de código. Se nenhum manipulador de erro local estiver presente, a exceção é propagada na pilha de chamadas, até que um manipulador correspondente seja encontrado. A pilha de chamadas representa todos os procedimentos que tiverem sido chamados antes para o ponto atual de execução e ainda não tenham sido finalizados. Se nenhum manipulador for encontrado nos procedimentos a pilha de chamadas quando ocorre um erro, o aplicativo é finalizado.

Tratamento de erros não estruturado

Tratamento de erros não estruturado é implementado com a declaração On Error , que é colocada no início de um bloco de código para manipular todas as possíveis exceções que ocorrem durante a execução do código. Todos os manipuladores de erro do Visual Basic 6.0 no .NET são objetos que podem ser acessados usando o namespace Microsoft.VisualBasic.Information.Err . O manipulador é definido como Nothing cada vez que o procedimento é chamado. Você deve colocar somente uma instrução On Error em cada procedimento, pois instruções adicionais desativar todos os manipuladores anteriores que são definidos no procedimento.

Na política de erros

A declaração On Error é usada para habilitar uma rotina de tratamento de erros, desativar um rotina de manipulação de erros ou especificar onde ramificar o código no caso de um erro.
   On Error { GoTo [ line | 0 | -1 ] | Resume Next }				
GoTo line

Usado para ativar a rotina da tratamento de erros, iniciando no local que é especificado pelo argumento de linha . O argumento de linha pode ser tanto um rótulo de linha ou um número de linha que está localizado no procedimento de fechamento. Um erro em tempo de execução ativa o manipulador de erro e ramifica o controle para a linha especificada. Se a linha especificada não for localizada no mesmo procedimento como a declaração On Error , ocorrerá um erro de compilação.

Para evitar comportamentos inesperados, coloque uma instrução Exit Sub , uma instrução Exit Function ou uma instrução Exit propriedade apenas antes do rótulo de linha ou do número da linha. Isso impede que o código de erro tratamento executem quando nenhum erro tiver ocorrido.

GoTo 0

Desabilita o manipulador de erros ativada que é definido dentro do procedimento atual e redefine-lo como Nothing .

GoTo -1

Desativa a exceção habilitada que é definida dentro do procedimento atual e redefine-lo como Nothing .

continuar Avançar

Move o controle de execução para a instrução que segue imediatamente após a instrução que causou o erro de tempo de execução ocorrer, e continua a execução deste ponto em frente. Isso é a forma preferencial para usar objetos de acesso, em vez de utilizar a instrução On Error GoTo .

exemplo

No seguinte exemplo de código, o manipulador de erro está habilitado na primeira linha da rotina com a instrução On Error GoTo Unstructured . O local do erro rotina de manipulação é identificado com o rótulo de linha Unstructured . A rotina de erro implementa uma simples instrução Select Case que executa o bloco de código, dependendo do erro que ocorreu correspondente.

A instrução Resume Next no final do erro tratamento procedimento devolve o controle da execução novamente para a linha que segue a linha que causou o erro ocorra.

O manipulador de erro é desativado, em seguida, com a instrução On Error GoTo 0 , seguida da instrução On Error Resume Next , que reativa o manipulador de erro. Se ocorrer um erro de tempo de execução, a instrução fará com que a execução a ramificação para a linha imediatamente seguinte a linha que causou o erro ocorra, da mesma forma que faz a instrução Resume Next no erro rotina de manipulação. Nesse caso, essa linha é a instrução if que avalia o número do erro e o exibe para o usuário, bem como limpar o objeto de erro.
   Public Sub fnErrors()   On Error GoTo Unstructured ' Enable error handler     Dim Result As Integer     Dim Value1 As Integer = 9     Dim Value2 As Integer = 0      On Error GoTo 0 ' Disables the error handler      'Moves execution to the line following the line that caused the error.     On Error Resume Next      Result = Value1 / Value2 ' Division by zero, cause an overflow error.      ' Catch the overflow error caused by dividing by zero.     If Err.Number = 6 Then       MessageBox.Show("Error Number: " & Err.Number.ToString)       Err.Clear() ' Clear Errors     End If     Exit Sub   Unstructured:  ' Location of error handler     Select Case Err.Number       Case 6         ' Display the error number.         MessageBox.Show("Divided by zero")       Case Else         ' Catch all other type of errors.         MessageBox.Show(Err.Description)     End Select     'Resume execution to the line following the line that caused the error.     Resume Next   End Sub				

Tratamento de erros estruturada

Com tratamento de erros estruturada, o Visual Basic tem agora uma maneira eficaz de impedir que erros inesperados encerrando a execução do aplicativo. Tratamento de erros estruturado também fornece os programadores uma maneira mais simples de criar aplicativos robustos que são mais fáceis de manter.

Tratamento de erros estruturado é implementado no Visual Basic. NET ou Visual Basic 2005 com um bloco Try... Catch... Finally de instruções. O bloco Try... Catch... Finally fornece, pela primeira vez para o Visual Basic, a capacidade de tratamento de erros aninhados.

Try... Catch... Finally instruções

O código a seguir demonstra a estrutura de uma instrução Try... Catch... Finally .
   Try      'Encapsulates a block of code that may produce a run-time error.   Catch [Optional Filters]     'The code runs if any of the statements in the Try block fails and filter is evaluated as true.   [Additional Catch Blocks]   Finally     'Code executed after Try and Catch statement.   End Try				
o código que seja esperado a gerar um erro em tempo de execução deve ser colocado no bloco Try para monitorar pelo manipulador de erro. Se esse código produz um erro durante a execução, o Visual Basic examina todas as instruções Catch implementadas dentro do bloco Try... Catch... Finally para encontrar uma condição que coincide com o erro. Se o Visual Basic encontrar uma condição correspondente, o controle de execução é transferido para a primeira linha de código dentro a instrução Catch . Se o Visual Basic não encontrar uma condição correspondente, o erro é propagado para a instrução Try... Catch... Finally externa. Essa instrução pode ser localizada no mesmo procedimento (instruções aninhadas) ou em um procedimento anterior que chamado aquele que gerou um erro. Esse processo é repetido até que uma instrução correspondente seja encontrada. Se uma instrução correspondente não for encontrada, um erro é gerado e o aplicativo é encerrado.

A instrução Finally é executada por último, independentemente se quaisquer erros encontrados. Em outras palavras, se nenhuma declaração correspondente Catch for encontrada, a instrução Finally será executado antes para a propagação para as instruções externas.

Essa hierarquia e propagação são demonstrados com o seguinte código:
   Module StructuredError     Sub Main()       Try         fnStructured()       Catch ex As Exception ' Catches all exceptions.         Debug.WriteLine("Exception Information: " & vbCrLf & ex.ToString)         'Displays the representation of current exception.       Finally         Debug.WriteLine("Main: Finally executed !")       End Try     End Sub     Public Sub fnStructured()       'Nested Error Handling       Try         Try           Dim X As Integer = 9           Dim Y As Integer = 0           Dim Result As Integer           Result = X / Y         Catch e As DataException ' Catches only DataException.           'Displays the representation of current exception.           Debug.WriteLine("Exception Information: " & vbCrLf & e.Message)          Finally           Debug.WriteLine("fnStructured: Inner Finally executed !")         End Try       Catch e As InvalidCastException ' Catches only defined exception.         'Displays the representation of current exception.         Debug.WriteLine("Exception Information: " & vbCrLf & e.ToString)       Finally         Debug.WriteLine("fnStructured: Outer Finally executed !")       End Try     End Sub   End Module				
no exemplo anterior, um erro é gerado em um procedimento fnStructured(). Isso é um erro de estouro de pilha, causado por divisão com um zero (0). Esse procedimento implementa dois blocos Try... Catch... Finally de instruções, mas nem um tem correspondência instruções Catch , e o erro não é detectado. Antes do controle é propagado na pilha de chamada, o código que é encapsulado no bloco Finally será executado. Bloco Try... Catch... Finally , que é implementado no Sub Main tem uma condição geral que captura todas as exceções são lançadas no seu bloco Try .

A seguir está a saída do procedimento anterior:
fnStructured: Inner Finally executed !fnStructured: Outer Finally executed !Exception Information:System.OverflowException: Arithmetic operation resulted in an overflow. atStructuredError.StructuredError.fnStructured() in C:\Documents andSettings\heikkiri\My Documents\Visual Studio Projects\Temp\StructuredError\StructuredError.vb:line 21 at StructuredError.StructuredError.Main() in C:\Documents and Settings\heikkiri\My Documents\Visual StudioProjects\Temp\StructuredError\StructuredError.vb:line 5Main: Finally executed !				

O objeto Err

O objeto Err , que é herdado do Microsoft Visual Basic 6.0, só pode ser usado para capturar erros em um procedimento que implementa erros não estruturado tratando com a declaração On Error .

O objeto Err contém informações sobre um erro de tempo de execução que ocorreu durante a execução do aplicativo. Como a execução insere um procedimento que contém o tratamento de erros, as propriedades do objeto Err são definidas como zero (0) ou seqüência de comprimento zero (""). Se ocorrer um erro durante a execução, as propriedades são definidas em seguida, para fornecer informações exclusivas sobre o erro que ocorreu, por meio de suas propriedades. Uma instância do objeto Err pode ser obtida através de uma função Microsoft.VisualBasic.Information.Err ; no entanto, porque o objeto Err é um objeto intrínseco com escopo global, ele não é necessário criar uma instância desse objeto em tempo de execução.

No caso de um erro de tempo de execução, as propriedades do objeto Err podem ser usadas para manipular o erro (dependendo do seu tipo), bem como para exibir informações para o usuário sobre o erro que ocorreu. A tabela a seguir mostra as propriedades diferentes associados com o objeto Err .

propriedade Descrição
Descrição Retorna ou define uma seqüência de caracteres que contém uma descrição do erro que ocorreu.
Erl Retorna um valor inteiro que indica o número da linha da última instrução que foi executada.
HelpContext Retorna ou define um número inteiro que contém a identificação do contexto para o tópico, um arquivo de Ajuda.
arquivo de Ajuda Retorna ou define uma expressão de seqüência de caracteres que contém o caminho completo do arquivo de ajuda associado com o erro.
LastDLLError Retorna um código de erro sistema que é produzido por uma chamada para um arquivo de biblioteca de vínculo dinâmico (DLL).
número Retorna ou define um valor numérico que especifica o erro.
fonte Retorna ou define uma seqüência de caracteres que especifica o nome do objeto ou aplicativo que originou o erro.

O objeto Err tem dois métodos associados a ele: aumentar e Limpar .

método Descrição
Limpar Usado para limpar todas as propriedades do objeto Err .
aumentar Usado para gerar um erro de tempo de execução, identificado com o número de erro que é passado como um seus parâmetros.

Classe de exceção

   System.Object      System.Exception				
Como mencionado neste artigo, o método preferido de tratamento de erros em Visual Basic .NET ou Visual Basic 2005 é manipulação de erros estruturada, que é implementada com um bloco Try... Catch... Finally . Todas as exceções detectadas no Visual Basic .NET ou Visual Basic 2005 são derivadas dessa classe, por exemplo, OverFlowException . No caso de um erro de tempo de execução, Visual Basic .NET ou Visual Basic 2005 lança um objeto de exceção pode ser gerado pelo sistema ou personalizada gerada. O método para capturar essas exceções é descrito na seção "Tratamento de erros estruturada" deste artigo.

Quando a exceção é lançada, o objeto global Err é definido como os valores correspondentes e uma nova instância de um objeto Exception é criada. Esta instância contém mais informações sobre o erro que ocorreu. Por exemplo, a propriedade StackTrace contém uma lista de métodos que foram chamado e levou a ocorrência do erro.

A tabela a seguir mostra as propriedades públicas que estão disponíveis para as exceções detectadas no tratamento estruturado de erro.

propriedade Descrição
HelpLink Retorna ou define o link para o arquivo de Ajuda está associado a essa exceção.
InnerException Retorna uma instância da exceção que causou a exceção atual ocorrer.
mensagem Retorna uma mensagem que descreve a exceção.
fonte Retorna ou define o nome do aplicativo ou objeto que causou o erro.
StackTrace Retorna uma seqüência que apresenta os quadros na pilha de chamada no momento quando a exceção foi lançada.
TargetSite Retorna o método que gerou a exceção.


A tabela a seguir mostra os métodos públicos que são implementados pela classe de exceção .

método Descrição
é igual a (herdado de objeto )Método sobrecarregado que é usado para determinar se duas instâncias do objeto são iguais.
GetBaseException Quando esse método for substituído em uma classe derivada, ela retorna a exceção que é a causa raiz de um ou mais exceções subseqüentes.
GetHashCode Serve como uma função de hash para um determinado digite; adequado para uso de algoritmos e estruturas de hash.
GetObjectData Quando substituído em uma classe derivada, GetObjectData define o SerializationInfo com informações sobre a exceção.
GetType (herdado de objeto )Retorna o tipo da instância atual.
ToString Função substituída que cria e retorna uma apresentação de seqüência de caracteres da exceção.

O objeto Err foi mantido no Visual Basic .NET ou Visual Basic 2005 por razões de compatibilidade e para facilitar a migração do Visual Basic 6.0 para Visual Basic .NET ou aplicativos Visual Basic 2005. É recomendável que o tratamento em aplicativos Visual Basic .NET ou Visual Basic 2005 de todos os erros ser executadas usando o tratamento de erro/exceção estruturada.
Referências
Arquivos de Ajuda:
  • Manipulação de exceção estruturada
  • Manipulação de exceção não estruturado
  • Objeto Err
  • Classe de exceção
Na política de erros Try Catch Finally

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 311326 - Última Revisão: 12/06/2006 23:18:59 - Revisão: 2.3

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbinfo KB311326 KbMtpt
Comentários