O que? Não era para fazer isso! Localizando erros de lógica

Nesta lição, você aprenderá como localizar erros lógicos em seu programa.

Nas lições anteriores, você aprendeu como localizar e corrigir erros de compilador e erros em tempo de execução.O terceiro tipo de erro de programação, os erros lógicos, pode ser o mais difícil de descobrir.Com os erros lógicos você não obtém aviso algum: o programa será executado, mas fornecerá resultados incorretos.Em seguida, você precisa ler seu código e determinar por que.

Felizmente, a depuração de ferramentas da Visual Basic pode ajudar. Duas técnicas de depuração, configuração de pontos de interrupção e investigação (stepping) do código, ajudam você a inspecionar o código uma linha de cada vez à medida que ele é executado, a fim de encontrar o erro.

Você pode definir um ponto de interrupção no Code Editor em qualquer linha executável do código.Quando o programa é executado, pontos de interrupção forçam-no a parar e ir para o modo de interrupção quando essa linha de código é alcançada.Em seguida, você pode obter quaisquer informações que você pode querer sobre o estado do programa nesse momento.Você pode verificar o valor de qualquer variável, testar expressões na janela Immediate ou fazer alterações em seu código com Edit and Continue.

Quando você estiver no modo de interrupção, você pode também depurar seu código, executando uma linha de cada vez para que você possa ver como funciona o código.Pressionar a tecla F8 faz com que a linha atual de código seja executada e, em seguida, para na próxima linha.Em seguida, você pode inspecionar os valores das variáveis para ver como eles se alteram de uma linha para a próxima.

Se a linha atual de código chama uma função ou procedimento Sub em qualquer lugar no seu código, quando você pressionar F8, a execução irá passar para esse procedimento.Após você ter passado por esse procedimento, você é enviado para a linha depois daquela que chamou o procedimento.Se você não deseja depurar um procedimento, você pode pressionar SHIFT+F8 para pular o procedimento.

Tente-o!

Para observar um erro de lógica

  1. No menu File, escolha New Project.

  2. No painel Templates, na caixa de diálogo New Project, clique em Windows Application.

  3. Na caixa Name digite LogicErrorse clique em OK.

    Abre um novo projeto Windows Forms.

  4. Da Toolbox, arraste dois controles TextBox e um controle Button para o formulário.

  5. Clique duas vezes no Button1 para abrir o Editor de Código.

  6. No manipulador de eventos Button1_Click, adicione o código a seguir.

    Dim minutes As Integer = CInt(Textbox1.Text)
    Dim miles As Double = CDbl(Textbox2.Text)
    Dim hours As Double = 0
    hours = minutes / 60
    MsgBox("Average speed " & GetMPH(hours, miles))
    
  7. Abaixo da linha End Sub, adicione a função a seguir.

    Function GetMPH(ByVal miles As Double, ByVal hours As Double) _
    As String
        GetMPH = CStr(miles / hours)
    End Function
    
  8. Pressione F5 para executar a página.Na primeira caixa de texto, digite 10 (para representar 10 minutos) e na segunda caixa de texto, digite 5 (para representar 5 milhas) e em seguida, clique em Button1 .

    Um caixa de mensagem é exibida com a mensagem "Average speed 0.03333334". No entanto, se você estiver viajando cinco milhas em dez minutos, a resposta correta seria 30 mph.

    Mantenha o projeto aberto. No próximo procedimento, você aprenderá a localizar o erro de lógica.

Localizando erros de lógica

No último exemplo, algo está obviamente errado com a lógica do programa.De acordo com o resultado, você está viajando menos que uma milha por hora e não trinta milhas por hora, como esperado. Mas qual é o erro?

No próximo procedimento, você definirá um ponto de interrupção e percorrerá o código para localizar o erro.

Tente-o!

Para definir um ponto de interrupção e percorrer o código

  1. No Editor de Código, localize a linha hours = minutes / 60 e clique na margem esquerda próxima dessa linha de código.

    Um ponto vermelho deve aparecer na margem e o código é realçado em vermelho, representando um ponto de interrupção.

  2. Pressione F5 para executar o programa novamente.Na primeira caixa de texto, digite 10. Na segunda caixa de texto, digite 5.Em seguida, clique em Button1.

    O programa para quando atinge o ponto de interrupção.A linha hours = minutes / 60 é realçada em amarelo.

    Inspecione os valores das variáveis mantendo o mouse sobre elas. O valor de hours deveria ser 0 e o valor de minutes deveria ser 10.

  3. Pressione F8 para executar a linha hours = minutes / 60 e ir para a próxima linha.

    Inspecione os valores das variáveis na linha MsgBox("Average speed " & GetMPH(hours, miles)). O valor de hours agora deveria ser 0.166666672 e o valor de miles deveria ser 5.0.

  4. Pressione F8 novamente para executar a linha atual.

    Observe que a execução vai para a linha Function GetMPH.

    Inspecione os valores das variáveis nessa linha. Você deveria perceber que o valor de miles é agora 0.166666672 e o valor de hours é agora 5.0, o oposto do que eram na linha anterior.Você encontrou o erro.

    Mantenha o projeto aberto. No próximo procedimento, você aprenderá a corrigir o erro de lógica.

Corrigindo erros de lógica

No procedimento anterior, os valores para as variáveis miles e hours alternado locais. Você pode identificar a causa?

Se você observar a linha MsgBox("Average speed " & GetMPH(hours, miles)), você verá que a função GetMPH recebe dois argumentos: hours e miles, nessa ordem.Se você observar a declaração Function GetMPH(ByVal miles As Double, ByVal hours As Double)... da função, você notará que os argumentos são listado como miles em primeiro e hours em segundo.

Ocorreu um erro na lógica porque os argumentos foram passados na ordem errada, resultando em um cálculo incorreto.Se os argumentos tivessem sido de diferentes tipos, você teria visto um erro em tempo de execução. Como os argumentos eram do mesmo tipo, não ocorreu erro em tempo de execução.Foi uma falha simples, mas o erro resultante foi difícil de localizar.

No próximo procedimento, você definirá um ponto de interrupção e percorrerá o código para localizar o erro.

Tente-o!

Para corrigir o erro de lógica

  1. No Editor de Códigos, altere a linha MsgBox("Average speed " & GetMPH(hours, miles)) como segue:

    MsgBox("Average speed " & GetMPH(miles, hours))
    
  2. Limpe o ponto de interrupção clicando no ponto vermelho na margem esquerda.

  3. Pressione F5 para executar a página.Na primeira caixa de texto, digite 10. Na segunda caixa de texto, digite 5.Em seguida, clique em Button1.

    Desta vez a caixa de mensagem deve exibir o resultado correto: "Average speed 30".

    Pode parecer que o programa está corrigido, mas há outro erro de lógica mais difícil de encontrar.Se você quiser tentar localizá-lo, mantenha o projeto aberto. Você irá usá-lo novamente na lição Outro bug: Algo está errado fixa.

Próximas etapas

Nesta lição, você aprendeu como localizar e corrigir um erro de lógica.Neste ponto, você pode ir para a próxima lição sobre o uso de comentários, ou você pode tentar localizar outro erro de lógica em Outro bug: Algo está errado fixa.

Próxima Lesson: Fazendo anotações em seus programas: Usando comentários

Consulte também

Tarefas

Não funciona! Localizando e eliminando erros em tempo de execução

Conhece os bugs: Três tipos de erros de programação

Localizando erros: Introdução à depuração do Visual Basic