GNU Debugger
O GNU Debugger, mais conhecido por GDB, é um depurador do GNU. Ele pode ser usado para depuração em sistemas Unix-like e suporta muitas linguagens de programação, como a C, C++, Fortran, Objective-C, Pascal, Java,[2] e parcialmente outras.[3] HistóriaO GDB foi escrito por Richard Stallman em 1986 como parte do sistema GNU, depois que o GNU Emacs atingiu um "estado razoável de estabilidade".[4]
O GDB é um software livre licenciado através da GNU General Public License. Foi modelado depois do depurador Dbx, que acompanhava a distribuição Berkeley Unix.[4] Desde 1990 até 1993 o GDB foi mantido por John Gilmore enquanto ele trabalhava para a Cygnus Solutions. Após este período, durante alguns anos, a Free Software Foundation nomeava membros que compunham o que era chamado de Comitê Diretor do GDB (ou GDB Steering Committee, em inglês). Em 2011, o conceito de Comitê Diretor foi desfeito e o projeto passou a ser mantido por um grupo de mantenedores globais que também é formado através de nomeações da Free Software Foundation.[5][6] Versões
Detalhes técnicosCaracterísticasO GDB oferece várias facilidades para a depuração de programas. O usuário pode monitorar e alterar valores de variáveis internas do sistema, e até chamar funções de forma independente do fluxo do programa. Os processadores suportados pelo GDB (até 2003) incluem: Alpha, ARM, H8/300, System/370, System 390, X86 e X86-64, IA-64 "Itanium", Motorola 68000, MIPS,PA-RISC, PowerPC, SuperH, SPARC, VAX. Também são suportados alguns processadores menos conhecidos como: A29K, ARC, AVR, CRIS, D10V, D30V, FR-30, FR-V, Intel i960, M32R, 68HC11, Motorola 88000, MCORE, MN10200, MN10300, NS32K, Stormy16, V850, VAX, e Z8000. (Em versões novas alguns destes processadores não serão suportados.)[8] O GDB possui suporte a simuladores para processadores ainda menos conhecidos, como M32R ou V850. Interface gráfica de usuárioO depurador não contém a sua própria interface gráfica do utilizador, suportando apenas a interface CUI ou interpretador de comandos. Por outro lado, existem alguns softwares que implementam uma interface gráfica para ele, como o DDD, GDBtk/Insight, Emacs no modo "GUD" ou o Eclipse com o plugin CDT. Estes programas oferecem facilidades similares às encontradas nas IDEs. O GDB continua em desenvolvimento, e desde a versão 7.0 as novas funcionalidades incluem suporte para scripts Python.[9] Desde a versão 7.0, existe suporte para "depuração reversível" — permitindo a recuar na sessão de depuração, muito parecido ao botão de desenrolar permitindo visualizar o pane no programa para ver o que aconteceu.[10] Outras ferramentas foram projetadas para trabalharem junto com o GDB, como detectores de vazamento de memória. Exemplos de comandos
Uma sessão como exemploConsidere o seguinte código-fonte escrito em C: #include <stdio.h>
#include <stdlib.h>
#include <string.h>
size_t
foo_len (const char *s)
{
return strlen (s);
}
int
main (int argc, char *argv[])
{
const char *a = NULL;
printf ("size of a = %d\n", foo_len (a));
exit (0);
}
Utilizando o compilador GCC no sistema GNU/Linux, o código acima deve ser compilado usando-se a opção gcc example.c -g -o example E o programa agora pode ser executado: # ./example Segmentation fault Quando o código de exemplo é executado, uma falha de segmentação é gerada. Portanto, podemos utilizar o GDB para inspecionar o problema. # gdb ./example GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 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-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /path/example...done. (gdb) run Starting program: /path/example Program received signal SIGSEGV, Segmentation fault. 0x0000000000400527 in foo_len (s=0x0) at example.c:8 8 return strlen (s); (gdb) print s $1 = 0x0 O problema está presente na linha 8, e ocorre quando a função #include <stdio.h>
#include <stdlib.h>
#include <string.h>
size_t
foo_len (const char *s)
{
return strlen (s);
}
int
main (int argc, char *argv[])
{
const char *a = "This is a test string";
printf ("size of a = %d\n", foo_len (a));
exit (0);
}
Ao recompilar e executar novamente o programa dentro do GDB, agora é possível observar o resultado correto: GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 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-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /path/example...done. (gdb) run Starting program: /path/example size of a = 21 [Inferior 1 (process 14290) exited normally] O GDB imprime a saída do comando Ver tambémReferências
Ligações externasInformation related to GNU Debugger |