Breakpoints: Como depurar suas aplicações no Visual Studio
O artigo mostra as principais ferramentas disponibilizadas pelo Visual Studio para o programador realizar a depuração do seu código com o objetivo de encontrar e corrigir erros que possam ter aparecido em sua aplicação.
De que se trata o artigo: O artigo mostra as principais ferramentas disponibilizadas pelo Visual Studio para o programador realizar a depuração do seu código com o objetivo de encontrar e corrigir erros que possam ter aparecido em sua aplicação. Um exemplo é quando desejamos ter a certeza que tipo de valor está sendo retornado de um método.
Em que situação o tema é útil: O artigo é útil para quem deseja conhecer recursos que irão aumentar a qualidade da aplicação ao tentar localizar erros nos programas e também irão permitir desenvolver uma aplicação já sendo preparado para futuras depurações, acrescentando alguns recursos, como atributos de depuração.
Breakpoints e além: Programas estão sujeitos a bugs. Aplicações que se definam estáveis também tem a tendência de apresentar, em alguma parte do seu ciclo de vida, eventuais bugs que podem ter sido acrescentados ao incluir ou alterar um requisito no projeto.
Boa parte do trabalho dos programadores, principalmente em projetos com ciclo de vida longo e que prevê manutenção do código, consiste em encontrar bugs e corrigi-los.
Esta tarefa pode se tornar demorada, porque é fato que mesmo o mais correto código deixa de ser claro, mesmo para o seu criador em poucas semanas, ficando difícil encontrar o causador do bug.
O Visual Studio e o Framework .NET sempre providenciaram ferramentas para facilitar a tarefa de depuração, desde suas versões iniciais. Além dessas, existem outros recursos que consistem mais em como desenvolver o projeto, visando a sua facilidade de depuração. Estes pontos serão alvo deste artigo e para demonstrar os mesmos, veremos a criação de um projeto de exemplo que pode ser usado para realizar testes de depuração.
Desenvolver um bom software sem realizar sua devida depuração é algo praticamente impossível, considerando a realidade dos projetos de software que existem hoje em dia. Sempre haverá algum ponto do código que irá estar sujeito a algum tipo de falha, seja nos momentos em que novos requisitos forem incluídos, novas plataformas forem suportadas ou mesmo ao interagir com outras partes de software.
Os bons projetos precisam reduzir o índice de bugs para o menor número possível, mas, precisam também facilitar a localização e solução destes quando surgirem. Estas são desde as mais básicas, como a interrupção do código para inspeção dos objetos na memória – o que é feito pelo já conhecido breakpoint, até preparar o código das classes para que apresentem informações que ajudem o programador a identificar o que está “acontecendo” com o seu código em um determinado ponto da execução.
É fato que quanto maior e mais complexo o projeto, mais difícil será fazer a depuração, entretanto, com as técnicas apresentadas aqui, até mesmo projetos imensos podem ser depurados e ter seus problemas resolvidos.
Resolvendo problemas na aplicação
Tudo se inicia dentro da IDE do Visual Studio ao se executar o código do projeto que é o objeto de depuração.
Neste artigo vamos considerar apenas a depuração de códigos baseados em aplicações que tenham alguma interface com o usuário, como aplicativos Windows Forms, WPF, ASP.NET etc. Os tópicos apresentados aqui são mais indicados para estes tipos de projetos, mas, também é possível realizar a depuração em outros, como Webservices e serviços do Windows, para serem depurados quando o código está disponível ou até mesmo, fazer a depuração de processos remotamente localizados.
Para iniciar a depuração é preciso que o código esteja sendo executado - aqui cabe uma observação importante para os programadores iniciantes: uma class library precisa estar anexada com um projeto executável que seja uma UI (interface com o usuário) para poder ser depurado. Se você tentar depurar um projeto deste tipo no Visual Studio, vai receber uma mensagem de que não é possível executar diretamente um projeto deste tipo.
Nota DevMan: Class Library é uma biblioteca de recursos criada a partir da plataforma .NET, sendo normalmente gerada como um arquivo recebendo a extensão .dll. Você pode, por exemplo, criar classes dentro da mesma. Desta forma, permite que as mesmas possam ser reutilizadas ao longo de uma série de projetos.
Os primeiros passos para entender como funciona a depuração é conhecer as duas modalidades para compilação e execução de um projeto, que são Debug e Release. Projetos no modo Debug incluem informações que facilitam a localização no código, como a call stack – que é a hierarquia de chamadas dos métodos e classes – contendo o número da linha da chamada no código e outros dados importantes para depuração, estes, que serão mostrados nos próximos tópicos.
Normalmente, a opção escolhida para a compilação do projeto é o modo Debug (este é utilizado durante o desenvolvimento/testes da aplicação) e após, é alterado para o modo Release para ser enviado ao usuário final.
A maneira mais simples de alterar o modo de compilação do projeto é através da barra de ferramentas, como ilustrado na Figura 1. Este modo é selecionado como padrão ao criar um novo projeto.