Introdução ao GDB

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

ComandoVersão resumidaDescrição
runrO comando de execução faz com que a execução do programa comece desde o início
quitqSai do GDB
breakpoint localizaçãob localizaçãoO comando breakpoint define um ponto de interrupção em um determinado local. (linha, função, etc)
print expressãop expressãoIsso imprimirá o valor da expressão dada.
continuecContinua a execução após um breakpoint, até o próximo ou o término do programa.
stepsExecuta uma única linha após um breakpoint.
nextnExecuta uma única linha. Se esta linha for uma chamada de subprograma, execute e retorne da chamada.
listlLista algumas linhas ao redor da localização de origem atual.
backtracebtExibe um backtrace da cadeia de chamadas.

Leave a Reply

Your email address will not be published.