Guia basico GDB

De MediaWiki do Campus São José
Revisão de 12h07min de 12 de agosto de 2014 por Msobral (discussão | contribs) (Criou página com 'Traduzido de [http://cseweb.ucsd.edu/classes/fa09/cse141/tutorial_gcc_gdb.html#gdb Tutorial of gcc and gdb]. = Introdução = '''gdb''' é um depurador (''debugger'') feito pel...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Traduzido de Tutorial of gcc and gdb.

Introdução

'gdb é um depurador (debugger) feito pelo projeto GNU. gdb pode executar passo a passo o seu programa linha por linha e mesmo instrução por instrução. Com ele se consegue também observar o valor de qualquer variável em tempo de execução. Por fim, ele ajuda a identificar o lugar e o motivo que causou um erro de execução do programa.

Uso básico

Todo programa a ser depurado com gdb precisa ser compilado pelo gcc com a opção -g. Isso é demonstrado abaixo com um pequeno programa de exemplo.

  1. Copie este programa para o arquivo exemplo.c:
    #include <stdio.h>
    #include <string.h>
    
    int main() {
      int n;
      char nome[32];
    
      printf("Digite seu nome: ");
      fgets(nome, 32, stdin);
      nome[strlen(nome)] = 0;
      for (n=strlen(nome); n >= 0; n--) {
        printf("%c", nome[n]);
      }
      return 0;
    }
    
  2. Compile-o da seguinte forma:
    gcc -g -o exemplo exemplo.c
    
  3. Use o gdb para depurá-lo:
    gdb ./exemplo
    
    • ... o que vai mostrar uma apresentação do gdb na sua tela:
      GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
      Copyright (C) 2012 Free Software Foundation, Inc.
      License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
      This is free software: you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
      and "show warranty" for details.
      This GDB was configured as "x86_64-linux-gnu".
      For bug reporting instructions, please see:
      <http://bugs.launchpad.net/gdb-linaro/>...
      Lendo símbolos de /home/aluno/exemplo...concluído.
      (gdb)
      
  4. Antes de iniciar a execução do programa, defina ao menos um ponto de parada (breakpoint). O gdb para a execução nesse ponto, a partir do qual se pode executar passo-a-passo. Um ponto de parada pode ser uma função ou uma linha do programa. No exemplo, o ponto de parada foi definido como sendo a função main:
    (gdb) break main
    Ponto de parada 1 at 0x40063c: file exemplo.c, line 4.
    
  5. Execute o programa, notando que a execução para no ponto de parada que foi definido:
    (gdb) run
    Starting program: /home/aluno/exemplo 
    
    Breakpoint 1, main () at exemplo.c:4
    4	int main() {
    
  6. Para avançar uma linha do programa, use o comando next. Após esse comando é mostrada a próxima linha do programa a ser executada:
    (gdb) next
    8	  printf("Digite seu nome: ");
    
  7. Para terminar a deupração, use o comando quit:
    (gdb) quit
    A debugging session is active.
    
    	Inferior 1 [process 15861] will be killed.
    
    Quit anyway? (y or n) 
    Y
    


To start running and debugging the program, we can simply type the "run" command after the (gdb) prompt as below:

(gdb) run

If the program takes arguments such as "garbage arg_1 arg_2", we may start running the program with these arguments as:

(gdb) run arg_1 arg_2