GNU Debugger ou GDB Uma poderosa ferramenta de depuração de código -fonte para programas Linux

GNU Debugger ou GDB Uma poderosa ferramenta de depuração de código -fonte para programas Linux

Um depurador desempenha um papel vital em qualquer sistema de desenvolvimento de software. Ninguém pode escrever um código sem insetos de uma só vez. Durante o curso do desenvolvimento, os bugs estão sendo levantados e precisa ser resolvido para aprimoramento adicional. Um sistema de desenvolvimento está incompleto sem um depurador. Considerando a comunidade de desenvolvedores de código aberto, o GNU Debugger é sua melhor escolha. Também é usado para o desenvolvimento de software comercial em plataformas do tipo Unix.

Depuração do código -fonte do GNU Debugger

GNU Debugger, também conhecido como GDB, nos permite esgueirar -nos pelo código enquanto ele é executado ou o que um programa estava tentando fazer no momento antes de travar. O GDB basicamente nos ajuda a fazer quatro coisas principais para capturar falhas no código -fonte.

  1. Inicie o programa, especificando argumentos que podem afetar o comportamento geral.
  2. Pare o programa em condições especificadas.
  3. Examine o acidente ou quando o programa foi interrompido.
  4. Altere o código e para experimentar o código modificado instantaneamente.

Podemos usar o GDB para depurar programas escritos em C e C ++ sem muito esforço. Até agora o suporte a outras linguagens de programação, como D, Modula-2, Fortran são parciais.

Introdução ao depurador GNU ou GDB

GDB é chamado usando o GDB comando. Na emissão GDB, Ele exibe algumas informações sobre a plataforma e o coloca no (GDB) solicitar como mostrado abaixo.

[[Email Protected] ~]# GDB
Saída de amostra
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Copyright (c) 2013 Free Software Foundation, Inc. Licença GPLV3+: GNU GPL Versão 3 ou mais tarde Este é um software livre: você está livre para alterar e redistribuí -lo. Não há garantia, na medida permitida por lei. Digite "Mostrar cópia" e "Mostrar garantia" para obter detalhes. Este GDB foi configurado como "x86_64-redhat-linux-gnu". Digite "Show Configuration" para detalhes de configuração. Para instruções de relatório de bugs, consulte: . Encontre o manual do GDB e outros recursos de documentação online em: . Para obter ajuda, digite "Ajuda". Digite "Palavra Apropos" para procurar comandos relacionados a "Word". (GDB)

Tipo ajuda Lista para sair das diferentes classes de comandos disponíveis dentro do GDB. Tipo ajuda seguido de um nome de classe para uma lista de comandos nessa classe. Tipo Ajude a todos Para a lista de todos os comandos. Nome do comando Abreviações são permitidas se forem inequívocas. Por exemplo, você pode digitar n em vez de digitar próximo ou c para continuar e assim por diante.

Comandos GDB mais comumente usados

Comumente usado Comandos do GDB estão listados na tabela a seguir. Esses comandos devem ser usados ​​no prompt de comando gdb (GDB).

Comando Descrição
correr Inicie uma execução do programa
desistir Saia do GDB
imprimir expr Imprima expressão onde expr pode ser um nome variável também
próximo Vá para a próxima linha
etapa Entre na próxima linha
continuar Continue da linha atual até o final do programa ou o próximo ponto de interrupção

Observe a diferença entre os dois comandos etapa e próximo. O próximo O comando não entra na função se a próxima linha for uma chamada de função. Enquanto etapa O comando pode entrar na função interna e ver o que acontece lá.

Uma amostra de sessão com GDB

Considere o seguinte código -fonte.

// soma.c #include int sum (int a, int b) int c; c = a + b; retornar c;  int main () int x, y, z; printf ("\ Nenter o primeiro número:"); scanf ("%d", & x); printf ("Digite o segundo número:"); scanf ("%d", & y); z = soma (x, y); printf ("A soma é %d \ n \ n", z); retornar 0; 

Para depurar o arquivo de saída, precisamos compilar o mesmo com -g opção para GCC do seguinte modo.

$ gcc -g soma.c -o soma

O arquivo de saída soma pode ser anexado ao GDB por meio das duas maneiras a seguir:

1. Especificando o arquivo de saída como um argumento para o GDB.

$ GDB Soma

2. Execução do arquivo de saída dentro do GDB usando arquivo comando.

$ GDB (GDB) Soma do arquivo

O lista O comando lista linhas no arquivo de código -fonte e move o ponteiro. Então, primeiro lista exibirá as 10 primeiras linhas e o próximo lista exibe os próximos 10 e assim por diante.

(gdb) Lista 1 #include 2 3 int soma (int a, int b) 4 int c; 5 c = a + b; 6 retornar C; 7 8 9 int main () 10 int x, y, z;

Para começar a execução, emita o correr comando. Agora o programa é executado normalmente. Mas esquecemos de colocar alguns pontos de interrupção no código -fonte para depuração, certo? Esses pontos de interrupção podem ser especificados para funções ou em linhas especificadas.

(GDB) B Principal

Observação: Eu usei uma abreviação b para quebrar.

Depois de definir o ponto de interrupção na função principal, o execução do programa parará na linha 11. O mesmo pode ser transformado em vigor se o número da linha for conhecido antes.

(gdb) b soma.C: 11

Agora passe pelas linhas de código usando o próximo ou n comando. É importante notar que próximo O comando não entra no código da função dentro, a menos que um ponto de interrupção seja definido na função. Vamos experimentar o imprimir comando agora. Defina o ponto de interrupção na soma da função como abaixo.

(GDB) B Ponto de interrupção da soma 1 em 0x4005AA: soma do arquivo.C, linha 5. (GDB) r Programa de partida: /raiz /soma Digite o primeiro número: 2 Digite o segundo número: 3 ponto de interrupção 1, soma (a = 2, b = 3) em soma.C: 5 5 C = A + B; (GDB) P A $ 1 = 2 (GDB) P B $ 2 = 3 (GDB) C continuando. A soma é 5 [inferior 1 (processo 3444) saiu normalmente]

Se o programa que está sendo executado requer parâmetros da linha de comando, forneça o mesmo junto com o correr comando como.

(GDB) Run… 

Os arquivos de biblioteca compartilhados associados ao programa atual em execução podem ser listados como.

(GDB) Informações Compartilhar de Syms Leia a Biblioteca de Objetos Compartilhados 0x00000035a6000b10 0x00000035a6019c70 sim /lib64 /ld-linux-x86-64.então.2 0x00000035A641F560 0X00000035A6560BB4 SIM /LIB64 /LIBC.então.6

Modificando variáveis

GDB também é capaz de modificar variáveis ​​ao longo da execução do programa. Vamos tentar isso. Como mencionado acima, defina o ponto de interrupção na linha 16 e execute o programa.

(GDB) r Programa de partida: /raiz /soma Digite o primeiro número: 1 Digite o segundo número: 2 ponto de interrupção 1, main () em soma.c: 16 16 printf ("A soma é %d \ n \ n", z); (GDB) SET Z = 4 (GDB) C continuando. A soma é 4

Agora a = 1, b = 2 e o resultado deve ser z = 3. Mas aqui mudamos o resultado final para z = 4 na função principal. Dessa maneira, a depuração pode ser facilitada usando o GDB.

Ativar/desativar pontos de interrupção

Para obter a lista de todos os tipos de pontos de interrupção Informações de interrupção.

(GDB) Informações de interrupção do número de tipos de disp ENB O que 1 ponto de interrupção mantém y 0x0000000000004005C2 em main em soma.C: 11

Aqui há apenas um ponto de interrupção e é para. Desativar ativado Os pontos de interrupção especificam o número do ponto de interrupção junto com o desativar comando. Para ativar depois, use o habilitar comando.

(GDB) Desativar 1 (GDB) Informações Pontos de interrupção Número Disp ENB Endereço O que 1 ponto de interrupção Mantenha N 0x00000000004005C2 em Main no SUM.C: 11

Você também pode excluir os pontos de interrupção com excluir comando.

Debugando processos de execução

Numerosos processos estão sendo executados em segundo plano em um sistema GNU/Linux. Para depurar um processo em execução, antes de tudo, precisamos encontrar o ID do processo desse processo específico. pidof O comando fornece o PID de um processo.

$ pidof 

Agora precisamos anexar este PID ao GDB. Existem 2 maneiras.

1. Especificando o PID junto com o GDB.

$ gdb -p 

2. Usando anexar Comando do GDB.

(GDB) Anexar 

É tudo por agora. Estes são apenas básicos do GDB para começar bem em depurar o código -fonte e é muito mais do que as coisas explicadas acima. Por exemplo, podemos depurar usando as informações da pilha, variáveis ​​de ambiente e muito mais. Tente brincar com todas essas coisas ..