O que é o GDB

Usar o GDB

   $ gcc -g -o programa programa.c

Usar o GDB

   $ gdb programa
   ...
   (gdb) 

Usar o GDB

Exemplo

   $ gcc  -o factorial factorial.c
   $ ./factorial
   Introduza um inteiro positivo:4
   Factorial 4 = 0

Programa errado

#include <stdio.h>

int main(void) {
  int n, i, fact;

  printf("Introduza um inteiro positivo:");
  scanf("%d", &n);
  
  for(i = 1; i<=n; i++) 
    fact = fact*i;

  printf("Factorial %d = %d\n", n, fact);
}

Usar o GDB

Usando o GDB

Recompilar o programa com opção debugging:

$ gcc -g -o factorial factorial.c

Executar o GDB com o executável compilado:

$ gdb factorial

Executar o programa

Usamos o comando run para correr o nosso programa dentro do GDB:

(gdb) run
Starting program...
Introduza um inteiro positivo:4
Factorial 4 = 0
[Inferior 1 (process 9885) exited...

Executar o programa (cont.)

Definir breakpoints

break fun

parar a execução no início da função fun

break n

parar a execução no início linha número n


Podemos usar list para listar o programa juntamente com números de linhas.

Observar valores de variáveis

print var

print expr

mostrar o valor de uma variável ou expressão

display var

display expr

mostrar o valor de uma variável ou expressão em cada breakpoint

Observar valores de variáveis

Vamos usar:

  1. break para colocar um breakpoint no ciclo for;
  2. display para mostrar os valores de n, i, e fact.

Conclusão

int n, i, fact = 1;  // corrigido

Sumário de comandos

break fun

definir breakpoint no ínicio da função fun

break n

definir breakpoint no ínicio da linha n

delete n

remover o breakpoint número n

run

executar o programa desde o início

Sumário de comandos (cont.)

next

executar a próxima linha

step

executar a próxima linha (mas entra dentro de funções)

continue

continuar a execução até ao próximo breakpont (ou até ao final)

Sumário de comandos (cont.)

print expr

calcular e mostrar o valor duma expressão

display expr

mostrar o valor da expressão sempre que parar

set var nome = expr

modificar o valor de uma variável

quit

terminar a sessão