Aula Extra Depurador Code::Blocks Monitoria de Introdução à Programação
Depurador - Definição Um depurador (em inglês: debugger) é um programa de computador usado para testar outros programas e fazer sua depuração, que consiste em encontrar os defeitos do programa. -Wikipédia
O depurador do Code::Blocks Apresenta muitas funcionalidades, sendo estas as principais Com ele, acesso fácil, rápido e simples ao conteúdo das variáveis locais e globais do programa Mostra o fluxo de código, linha a linha pode-se observar as mudanças sobre o programa durante a sua execução Mostra a pilha de funções, muito útil para checar chamadas de funções e recursões.
Mas o que eu preciso fazer para usar essa ferramenta no nosso Code::Blocks?
Requesitos para utilizar o debugger Algumas pessoas tem problemas a utilizar o debugger (breakpoints que pulam, e etc). Antes de utilizar o debugger, certifique-se que: 1. O arquivo a ser debugado esteja em um projeto (arquivos fora de projeto não podem ser debugados ) 2. O caminho para o projeto não deve conter caracteres estranhos (acentos, ª, º, e alguns arriscam dizer o espaço) Se o debugger ainda não pegar, reinicie o Code::Blocks!
Requesitos do debugger
OK, meu arquivo já está em um projeto, mas como eu começo a utilizar essa mágica aí que vai salvar as minhas listas?
Breakpoints Pontos de parada Calma! Antes, precisamos saber alguns conceitos, o primeiro deles é o ponto de parada(breakpoints). Quando o programa for executar o código pelo modo debug, ele vai parar aonde nos for conveniente, e podemos escolher isto através dos breakpoints. Para setar um breakpoint, você pode clicar na linha, entre o número e o texto, e aparecerá um círculo vermelho, ou clique com o botão direito e selecione Toggle Breakpoint
Adicionando um breakpoint
Watches A janela de watches é, provavelmente, o melhor recurso do debugger, por ela, você pode ver os valores das variáveis em tempo real, passo a passo no programa Por padrão, a janela de watches mostra 2 coisas : Variáveis locais e Parâmetros de função, mas mais coisas podem ser vistas por essa janela, mas por enquanto vocês ainda não viram estes outros assuntos, então vamos nos limitar por aqui
Exemplo - Watches
A pilha das funções Call Stack A pilha em que as funções são chamadas, que foi citada anteriormente, é chama de Call Stack, e com ela você pode verificar qual a ordem das funções que foram chamadas, e qual foi o parâmetro delas, muito útil, principalmente em chamadas recursivas
Exemplo Call Stack
Exibindo os watches/call stack
Começando a debugar Pronto, agora que você já sabe sobre os breakpoints, os watches e a call stack, vamos começar a finalmente analisar o código! A tecla para começar o debugger não é a mesma do Build and Run (F9), agora o Debug é inicializado pelo F8! E então, o código irá seguir até que três coisas aconteçam:
1 Erro de execução
2 O programa parou onde deveria
3 Ele não chega no breakpoint Bom, neste caso, ele provavelmente encontrou um scanf, e aí o comando vai para o console, onde ele aguarda que você digite alguma coisa. (Neste caso, o programa parou no scanf indicado pelo cursor)
Breakpoints após dados de entrada É útil colocar breakpoints após as entradas do arquivo, pois você tem (ou deveria ter) certeza de que as entradas estão vindo corretas, e aí para não ter que alternar entre IDE e console constantemente, um breakpoint após os scanf s é uma boa opção Após ser digitado alguma coisa no console, o debugger continua sua execução até houver um dos três casos já mencionados
Comandos do debugger Além do F8, usado para iniciar o debugger, você ainda tem mais alguns botões com funcionalidades: F7 Anda uma linha (pula funções) Shift + F7 Anda uma linha (entra em funções) Ctrl + F7 Pula até o próximo breakpoint/erro/entrada A seta amarela indica a linha que o programa executará em seguida
Exemplo - Debugger
Mudando valores de variáveis pelo watch O que foi visto até agora já é extremamente útil, e na maioria das vezes, suficiente para suas necessidades, mas algo que ainda pode ser feito pelo debugger é ALTERAR o valor das variáveis a seu critério enquanto o programa está rodando Isso pode ser útil para testar condições e comportamento do programa para valores específicos, mais útil ainda se o valor da variável a ser alterada não é dado como entrada do programa (seu uso é interno)
Exemplo Alterar Valor
Exemplo Alterar Valor
Watch em vetores O watch em vetores é semelhante ao watch em variáveis, é automático, ele já põe para você todos os valores para você
Watches de outros tipos de variáveis Ainda existem outros tipos de variáveis que possamos dar uma olhada pela Janela de Watches, como ponteiros, vetores dinâmicos(a partir de ponteiros), estruturas, classes, e etc. Mas vamos nos limitar ao que vocês viram até agora e parar por aqui. O watch desses tipos de estrutura é feito de modo manual, e requer um pouco mais de conhecimento nestes assuntos
Composição de variáveis no watch Você também pode colocar expressões na janela de watchs, útil para não ter que calcular manualmente o resultado de várias coisas Ele calcula praticamente qualquer coisa, desde somas e multiplicações até resultado de funções!
Exemplo - Composição
Exemplo - Composição
Ultimas observações Nunca feche o debugger fechando a tela do console, isso vai dar um erro no fechamento do processo! Procure sempre encerrar o debugger pelo botão em X dentro do próprio Code::Blocks!
Ultimas observações Use o debugger com moderação, não use o debugger para programar e sim para depurar seu programa. Faça seu programa normalmente, e quando houver terminado, mas ainda houver erros, aí sim use o debugger, não tente programar do zero com ele, afinal na prova não há debugger e aí você vai ter que se virar...
Dúvidas???