Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boas pessoal!!
Outro dia, dando uma olhada no fórum, notei a quantidade de gente que não sabe utilizar um compilador da forma correta. Todo mundo comete erros de sintaxe, esquecemos de colocar ';' no final das instruções, confundimos tipos passados para funções....
Mas o compilador não perdoa, e nos diz tudo que está errado no nosso código, em questão de sintaxe.
Então decidi tentar ensinar a usar um compilador e um debugger, de uma forma básica.
Quem está no linux, muito provavelmente ja tem as duas ferramentas que utilizarei...
minhas versões:
gcc - 4.2.4
gdb - 6.8
Vamos começar com o compilador...
Eu espero que vocês saibam como compilar um código "na mão", isto é, sem "ctrl+f9" do seu IDE.
Para aqueles qu não sabem, a sintaxe do gcc é:
gcc [opções][arquivos][-o saída (opcional)]
Algumas das opções mais utilizadas:
-Idir --> adiciona um diretório "dir" onde o compilador procurará por #includes
-Ldir --> adiciona um diretório "dir" onde o linker procurará por bibliotecas
-larquivo --> Adiciona um bilioteca a linkagem (.a, .lib, .so, .dll...),
se não for uma biblioteca "padrão", deve-se indicar o diretório onde ela se encontra, com -L
Não é preciso escrever o "lib" nem a extensão do arquivo, suponha que você quer incluir a bilbioteca /home/eu/projetos/libteste.so
O seu comando ficaria: gcc -L/home/eu/projetos -lteste
-c --> apenas compila os objetos, não efetua a linkagem
-g --> compila os objetos em debug mode, adicionando informações que permitem a
utilização de um debugger.
-Wopção --> SUA OPÇÃO PREFERIDA!!!, habilita os warnings (avisos) do
compilador, são eles que te avisam onde estão os erros do seu código, te dizem até a
linha... que moleza!
Acho que para já está bom.
Compilando um código
código: http://codepad.org/eOqb8tH6
O que o compilador me disse:
>
victor@matrix:~/Desktop/tuto$ gcc -Wall -Wextra -g code.c
code.c:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void’
code.c:14: error: expected ‘)’ before ‘*’ token
code.c:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
code.c:16: error: expected ‘)’ before ‘*’ token
code.c:17: error: expected ‘)’ before ‘*’ token
code.c: In function ‘main’:
code.c:22: error: ‘node’ undeclared (first use in this function)
code.c:22: error: (Each undeclared identifier is reported only once
code.c:22: error: for each function it appears in.)
code.c:22: error: ‘list’ undeclared (first use in this function)
code.c:24: warning: implicit declaration of function ‘add_node’
code.c:31: error: expected ‘;’ before ‘add_node’
code.c:34: warning: implicit declaration of function ‘print_list’
code.c:38: warning: implicit declaration of function ‘remove_node’
code.c:38: warning: implicit declaration of function ‘find_node’
code.c:45: warning: implicit declaration of function ‘destroy_list’
code.c: At top level:
code.c:53: error: expected ‘)’ before ‘*’ token
code.c:75: error: expected ‘)’ before ‘*’ token
code.c:105: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
code.c:122: error: expected ‘)’ before ‘*’ token
code.c:135: error: expected ‘)’ before ‘*’ token
Notem nas opções que utilizei para compilar o código:
-Wall: dizendo o compilador para mostrar TODOS os warnings
-Wextra: pedindo ainda os warnings extra
-g: debug mode.
E notem que o compilador me falou TUDO que estava errado no código...
A nomenclatura é muito simples:
<nome_do_arquivo>:<número_da_linha>:<error ou warning>: o que você fez de errado
Depois de seguir as mensagens dele, temos outro código:
Ao compilar esse novo código.... tcharaaaam! nenhum erro, nem warning! maravilha!!
Mas e ao executar o programa?
>
victor@matrix:~/Desktop/tuto$ ./a.out
[804a008] 1
[804a018] 2
[804a028] 3
[804a038] 4
[804a048] 5
[804a058] 6
[804a068] 7
[804a078] 8
[804a088] 9
Vamos agora apagar alguns nós (7 e 8)...
[804a008] 1
[804a018] 2
[804a028] 3
[804a038] 4
[804a048] 5
[804a058] 6
[804a088] 9
Vamos liberar a lista inteira...
Segmentation fault
OooOOooOOoops... SIGSEGV...
É Agora que entra o nosso amigo gdb
Entre amanhã e depois escrevo qualquer coisinha sobre como debugar algo no modo texto!
Abraços, até a próxima!!
ps.: Espero que a quantidade de tópicos inúteis diminua, e apareçam mais tópicos interessantes e que tem algo a acrescentar para todo o fórum. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Carregando comentários...