Pesquisar no blog:

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.

sábado, 2 de março de 2013

Compilador GCC

GNU Compiler Collection (GCC) é um conjundo de compiladores desenvolvido por Richard Stallman também fundador do projeto GNU.
Esse compilador é utilizado por várias plataformas: Windows, Linux, Unix, etc
Para desenvolver um programa em C você só precisará então de um editor de texto como o bloco de notas (Windows) ou VI (Linux). O programa escrito nesses editores devem ser salvos com a extensão ".c".
Exemplo: meu_programa.c
E este código fonte deve ser compilado pelo GCC com a seguinte linha de comando:
Windows:
Compilar: gcc -c meu_programa.c
Ao compilar é gerado um objeto que devemos "linkeditar": gcc -o meu_programa_executavel meu_programa.o
Podemos ainda gerar o executável direto: gcc -o meu_programa_executavel meu_programa.c
Linux:
Geração direta do executável: $ gcc meu_programa.c -o meu_programa_compilado

Obs.: o argumento "-o" linka o objeto gerado para o executável e logo a frente é informado o nome do programa executável.
O GCC é um compilador escrito para Unix/Linux, para instalar no Windows usaremos o MinGW (Minimalist GNU for Windows). Faça o download aqui.
Após instalar o MinGW você poderá encontrar o GCC dentro de seu diretório na pasta bin (C:\MinGW\bin).
Para facilitar a compilação e linkedição do seu programa salve seus programa nessa pasta.
Como exemplo vamos compilar o programa abaixo:
main()
{
      printf("Hello World \n");
      system("pause");
}
Salvei este programa no C:\MinGW\bin com o nome meu_programa.c
Agora para executar o programa utilizei os seguintes comando no CMD do Windows:
1- cd C:\mingw\bin
2- gcc -o meu_programa meu_programa.c

Assim gerei o executável (meu_programa.exe) dentro da pasta C:\MinGW\bin. Acesse a pasta e execute seu programa:

Apesar dessa possibilidade, hoje em dia temos ótimas IDE (Integrated Development Enviroment) para desenvolvermos na linguagem C. Como exemplo temos: Dev-C++ e Code::Blocks que já vem acompanhados de diversos compiladores, sendo o padrão o GCC.
No Dev-C++, por exemplo, se acessamos o menu Tools/Compiler Options e ativamos a guia programs nos deparamos com os principais compiladores utilizados por ela, e o primeiro que vemos na lista é o GCC: