Opções do compilador Linux GCC

2

Recentemente, comecei a usar o Linux como uma ferramenta de programação. Em meu livro, vi que o GCC é usado com duas opções: -g e -o . Agora, eu sei que -o é definir um nome de arquivo, mas qual é o propósito de -g ? Eu pensei que isso poderia estar relacionado à depuração, mas também programas compilados sem o argumento -g são debuggable. Então o que é isso?

    
por arielschon12 04.02.2013 / 21:01

3 respostas

4

Para citar o manual: Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information. . Eu não quero ser um cara RTFM, mas neste caso, ler a seção do manual em -g irá responder a sua pergunta. Como por -o, você está certo.

    
por 04.02.2013 / 21:14
3
A opção

-g permite o uso de informações extras de depuração que o GDB pode usar. Aqui está um exemplo de código C:

int main() {
    int x = 1/0;    
}

vamos compilar sem a opção -g e ver a saída do gdb:

$ gcc test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test 

Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main ()

E agora com a opção -g:

$ gcc -g test.c -o test
test.c: In function ‘main’:
test.c:2:11: warning: division by zero [-Wdiv-by-zero]
$ gdb -q ./test
Reading symbols from /home/mariusz/Dokumenty/Projekty/Testy/test...done.
(gdb) run
Starting program: /home/mariusz/Dokumenty/Projekty/Testy/test 

Program received signal SIGFPE, Arithmetic exception.
0x080483cb in main () at test.c:2
2       int x = 1/0;    

Como você pode ver, agora há informações sobre a linha com erro.

    
por 04.02.2013 / 21:16
0

Está relacionado com a depuração:

(de man gcc )

-g Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.

Você pode executar um depurador em um programa sem depurar símbolos nele, mas é como tentar localizar suas chaves no escuro. Por exemplo, você não pode definir pontos de interrupção:

(gdb) break 6
No symbol table is loaded.

Isso é um grande incômodo.

    
por 04.02.2013 / 21:19