Pesquisar no blog:

Mostrando postagens com marcador Depuração. Mostrar todas as postagens
Mostrando postagens com marcador Depuração. Mostrar todas as postagens

quarta-feira, 13 de março de 2013

Depuração (Debugger) no Code::Blocks

Depuração é uma ferramenta disponibilizada pela maioria das IDEs para facilitar o teste de um código fonte.
Com ele você pode executar seu programa "passo-a-passo" e observar o fluxo dos seus dados dentro das estruturas if/else, switch/case, a quantidade de vezes que se está executando um  laço de repetição (for, while, do/while), verificar o valor das variáveis, acompanhar funções, etc.
Dessa forma você consegue descobrir erros lógicos. Pequenos detalhes que podem fazer seus programas não funcionar como deveria.
A depuração é de extrema importância para qualquer programador, até mesmo para os iniciantes, já que acompanhar o código linha-a-linha e fazendo seus cálculos e comparações lógicas no "dedo", em um papel ou com sua própria memória seria muito mais difícil.

Como utilizar a depuração no Code::Blocks

A depuração no Code::Blocks é bem simples de se usar. A unica coisa que você deve fazer é salvar o seus código fonte como um projeto. Apenas dessa forma você pode depurar seu programa.
Então se você já tem algum código fonte você deverá copia-lo para um arquivo que faça parte de um projeto.

IMPORTANTE: Ao criar o projeto desative a opção "Release" no assistente de novo projeto.
IMPORTANTE: O arquivo com a função principal deve se chamar "main.c" ou a depuração não funcionará!
#define TAM 10
int main(int argc, char *argv[])
{
    int i, j, aux, troca, v[TAM] = {7,0,5,1,4,2,6,3,-8,-1};
    for(i = 0; i < TAM; i++)
    {
          troca = 0;
          for(j = 0; j < (TAM-1)-i; j++)
          {
                if(v[j] > v[j+1])
                {
                    aux = v[j];
                    v[j] = v[j+1];
                    v[j+1] = aux;
                    troca = 1;
                }
          }
          if(troca == 0)
             break;
    }
    printf("\n\nOrdenado: \n");
    for(i = 0; i < TAM; i++)
    {
         printf("%d, ", v[i]);
    }
    system("pause");
    return 0;
}
Este código é uma das soluções propostas para ordenação de valores. Sendo este o mais simples de todas as soluções propostas (Bubble Sort).
Para que a depuração pare em determinados pontos você pode utilizar os breakpoints clicando na barra cinza ao lado do código fonte próximo aos números das linhas:






Para iniciar a depuração no Code::Blocks você pode utilizar a opção Debug/Start ou o atalho F8.

Observe que ao iniciar a depuração é feita uma seta amarela na linha onde o programa esta parado:


Você pode controlar a depuração através de opções oferecidas pela IDE:
Stop debugger: Para a execução do programa.
Continue: executa até o próximo breakpoint.
Next Line: executa a próxima linha.
Step into: entrar em uma função.
Step out: sair de uma função.
Start: Iniciar.
Debugging windows: Você pode acessar a opção "Debugging windows" através do meneu Debug ou pela barra de ferramentas:

Através dela você tem acesso a algumas janelas que auxiliam na visualização de Breakpoints (pontos de paradas), CPU Registers (Registradores do processador), Watcher (valores das variáveis), etc.

sexta-feira, 8 de março de 2013

Depuração (Debugger) no Dev-C++

Depuração é uma ferramenta disponibilizada pela maioria das IDEs para facilitar o teste de um código fonte.
Com ele você pode executar seu programa "passo-a-passo" e observar o fluxo dos seus dados dentro das estruturas if/else, switch/case, a quantidade de vezes que se está executando um  laço de repetição (for, while, do/while), verificar o valor das variáveis, acompanhar funções, etc.
Dessa forma você consegue descobrir erros lógicos. Pequenos detalhes que podem fazer seus programa não funcionar como deveria.
A depuração é de extrema importância para qualquer programador, e mesmo para os iniciantes já se há esse habito de depuração desde o inicio, acompanhando o código linha-a-linha e fazendo seus cálculos e comparações lógicas no dedo, ou em um papel ou com sua própria memória.

Como utilizar a depuração no Dev-C++

Antes de usar a depuração no Dev-C++ devemos configurar algumas coisas. Siga esses passos:
1- Abra o Dev-C++ e acesse Tools/Compiler Options
2- Ative a opção "Add the following commands when calling compiler" e digite o argumento -O0
3- Ative a Guia Settings opção Linker e marque para Yes a opção "Generate debugging information"
Obs.: antes de depurar seu programa é necessário que ele seja compilado.

Vou usar como exemplo o seguinte código fonte:
int main()
{
int n1,n2,n3,i,r;
n1 = 1;
n2 = 1;
for (i = 0; i < 20; i++)
{
  if (i < 2)
   printf("%d ",n1);
  else
            {
   n3 = n1 + n2;
   n1 = n2;
   n2 = n3; 
   printf("%d ",n3);
            }
}
getch();
return (0);
}
Este código é uma solução minha proposta para o problema de Fibonacci. Para saber mais sobre Fibonacci acesse este artigo do tecmundo de Wikerson Landim, muito interessante!
De forma resumida é: cada elemento, a partir do terceiro é obtido somando-se os dois anteriores.
Para que a depuração pare em determinados pontos você pode utilizar os breakpoints clicando na barra preta ao lado do código fonte:

Para iniciar a depuração no Dev-C++ você pode utilizar a opção Debug/Debug ou o atalho F8.
Você pode ainda controlar a depuração através de opções oferecidas pela IDE:
Next Step: executa a próxima instrução.
Step into: entrar em uma função.
Continue: executa até o próximo breakpoint.
Run to Cursor: executa até onde o cursor estiver posicionado.
Debug: Iniciar/Parar Depuração
Stop Execution: Para a execução do programa.
Add Watch: adiciona em um painel a esquerda do código as variáveis que você deseja visualizar o valor. Para adicionar você só precisar digitar seu nome. 
Exemplo:

Painel com valores das variáveis:
Observe que enquanto você executa a depuração seu programa fica em execução, e todo seu conteúdo aparece de acordo com os passos que são executados.
É importante que você acompanhe os valores das variáveis e o fluxo dos dados para verificar se não existem erros de lógica no seu programa.
Você pode trocar o valor de uma variável enquanto seu programa roda para testar seu funcionamento clicando com o botão direito sobre ela:

Veja também como depurar seu código em linguagem C com o Code::Blocks.