Um dos grandes problemas dos alunos de graduação na área de tecnologia é que grande parte não utilizam algum tipo de depurador na época ainda de estudos. Postergando isso para quando os mesmo estão trabalhando. Segue uma dica de uso do sistema GDB (GNU Debugger), depurador que, como muitos outros, permite você ver profundamente, o que está acontecendo com um programa na sua execução.
De acordo com a documentação do GDB, ele pode fazer quatro tipos principais de coisas para ajudá-lo a identificar bugs:
- Inicie seu programa, especificando qualquer coisa que possa afetar seu comportamento.
- Faça seu programa parar em condições especificadas.
- Examine o que aconteceu, quando seu programa parar.
- Mude as instruções em seu programa, para que você possa experimentar corrigir os efeitos de um bug e continuar a aprender sobre outro.
Para início com GDB vamos utilizar o seguinte código:
/*
============================================================================
Name : main.c
Author : Anderson Moreira
Version :
Copyright : Your copyright notice
Description : Ansi-style to execute GDB
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Ola mundo!\n");
FILE *fp;
int a = 1;
a = a + 2;
fp = fopen("/home/alsm/out.txt", "w+");
fprintf(fp, "Este e um teste do fprintf...\n");
fputs("Este e um teste do fputs...\n", fp);
fclose(fp);
printf("a: %d\n", a);
return EXIT_SUCCESS;
}
Compile e Execute
Para compilar estamos utilizando o VSCODE, mas o mesmo também pode ser compilador em um terminal em que o GCC esteja instalado na máquina. Porém para depurar deve ser utilizada a flag “-g” que permite habilitar e usar informações extras.

GDB

Executando o Programa
Agora que temos o GDB aberto, pode começar a executar o programa usando o comando run
.

Breakpoints
Breakpoints são lugares no código, por exemplo, uma linha no código, que você pode especificar e sempre que o computador atinge este ponto, ele faz uma pausa antes de executar a linha especificada e mostra o prompt do depurador. Para criar um breakpoint usamos o comando break
.

No exemplo, estamos criando um breakpoint na linha 18
ou seja onde tem a = a + 2
;
Análise de Dados
Agora que temos um breakpoint, podemos executar o programa novamente e começar a analisar os dados.

Para ver o valor atual armazenado na variável a
usamos o comando print
.

Lembre-se que a linha atual ainda não foi executada. Então, se quisermos executar a linha atual e parar no próximo, executamos o comando next
.

Se imprimirmos a variável a
novamente, devemos ver um valor diferente.

Tudo funcionou como esperado, agora podemos continuar a execução usando o comando continue
, que retomará a execução do programa até que um breakpoint seja atingido.

Comandos Básicos
Comando | Versão resumida | Descrição |
run | r | O comando de execução faz com que a execução do programa comece desde o início |
quit | q | Sai do GDB |
breakpoint localização | b localização | O comando breakpoint define um ponto de interrupção em um determinado local. (linha, função, etc) |
print expressão | p expressão | Isso imprimirá o valor da expressão dada. |
continue | c | Continua a execução após um breakpoint, até o próximo ou o término do programa. |
step | s | Executa uma única linha após um breakpoint. |
next | n | Executa uma única linha. Se esta linha for uma chamada de subprograma, execute e retorne da chamada. |
list | l | Lista algumas linhas ao redor da localização de origem atual. |
backtrace | bt | Exibe um backtrace da cadeia de chamadas. |