Em programação, como as vezes não temos como saber onde pode estar aquele erro maldito, um bom depurador pode ser o nosso melhor amigo. Nesse artigo falarei de breakpoints: o que são, como definí-los, porque utilizá-los e também outros comandos como o list, next, run e o print.
Bom, no exemplo que vou utilizar irei ensinar como, no console,
podemos gerar um arquivo "core" e analisá-lo. Vamos pegar um
exemplo:
#include <stdio.h>
int main(void)
{
int a=1;
while (a<5) {
printf("%2d! ",a);
a++;
sleep(1);
}
return 0;
}
Muito bem, copie o exemplo e salve como "ex.c". Compile e execute.
Ele não contém erros. Agora, execute ele e durante a execução
pressione as teclas CONTROL+Pipe. O Pipe (|) é a barrinha reta usada
normalmente para indicar que a saída de um programa vai ser
direcionado para a entrada de outro.
Logo após isso será gerado um "core" e o programa será encerrado
com a mensagem: "Quit (core dumped)" ou ainda somente "Quit"
para quem tem o "ulimit -c 0" configurado.
[1] Comentário enviado por jose_maria em 20/05/2004 - 10:53h
Parabéns pelo artigo. Eu estava realmente procurando informações de como usar o gdb.
Mas eu fiquei com algumas dúvidas:
- Eu não consegui executar o comando ctrl+pipe, simplesmente não aconteceu nada. Eu também não entendi para que serve o comando.
- O comando list não funcionou no meu gdb, fica assim:
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/start.S
[2] Comentário enviado por jllucca em 20/05/2004 - 20:54h
CTRL+PIPE é usado para interromper o programa e gerar um arquivo core. Se o arquivo não for criado experimente fazer um "ulimit -c 99000" porque normalmente o pessoal gosta de deixar o limite dos arquivos cores para "0"(Zero) o que impossibilita a criação deles.
Quanto ao problema com o gdb estou com um igual na faculdade. Mas, quando descobrir como resolver posto aqui. A primeira coisa normalmente que agente vê se esta "OK" é vermos se compilamos os programas usando a flag "-g". To me sentido muito mal por não ter como usar o gdb, o jeito é fazer testes...
Sem erros, enquanto que:
$ make clean
$ make all
$ gdb promname
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/start.S
Assim, estou tentando dinovo organizar o meu Makefile porque eh ele o gerador de caso. Quanto ao seu programa se quiser conversar por email fica muito melhor!
[4] Comentário enviado por engos em 25/06/2004 - 11:42h
Legal o artigo, mas você não o encerrou muito cedo?
Acho que ficou faltando comentar que não é necessário ser um arquivo de core para debugar o programa, sem contar que poderia ter sido colocado mais de um breakpoint ou como remover os breakpoints.
Ficou bem redigido e de fácil entendimento, aconselho a postar um artigo complementar que explore mais o gdb, principalmente outras opções, qualquer coisa posso ajudar.
[5] Comentário enviado por jllucca em 27/07/2004 - 00:24h
Opa,
sobre o artigo ter acabado meio cedo. Realmente, estou pensando em escrever uma segunda parte. Mas, nada muito apressada que nem a segunda parte do void que como voce mesmo disse e depois eu fui ver realmente passa uma impressão meio vaga.
[6] Comentário enviado por wildtux em 16/01/2014 - 12:13h
Estou usando o gdb tanto no Linux quanto no cygwin. Muito bom o artigo. Já vi a parte 2 também, ficou realmente mais esclarecedora que a primeira, claro sem desmerecer a primeira. Boa iniciativa parabéns.