Linux GCC 编译器选项

Linux GCC 编译器选项

我最近开始使用 Linux 作为编程工具。在我的书中,我看到 GCC 与 2 个选项一起使用:-g-o。现在,我知道这-o是设置文件名,但是它的目的是什么-g?我认为这可能与调试有关,但不带-g参数编译的程序也是可调试的。那么它是什么?

答案1

引用手册:Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.。我无意成为 RTFM 人员,但在这种情况下,阅读有关 -g 的手册部分将回答您的问题。根据-o,你是对的。

答案2

-g 选项允许使用 GDB 可以使用的额外调试信息。下面是 C 代码的示例:

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

让我们在不使用 -g 选项的情况下编译它并查看 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 ()

现在使用 -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;    

如您所见,现在有有关错误行的信息。

答案3

与调试相关:

(从man gcc

-g 以操作系统的本机格式(stabs、COFF、XCOFF 或 DWARF 2)生成调试信息。 GDB 可以使用此调试信息。

您可以在程序上运行调试器而不调试其中的符号,但这就像试图在黑暗中找到您的钥匙一样。例如,您不能设置断点:

(gdb) break 6
No symbol table is loaded.

这就麻烦了。

相关内容