级别1(-g1):不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储,回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。
级别2(-g2):此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。
级别3(-g3):包含级别2中的所有调试信息,以及源代码中定义的宏。
-g生成的调试信息可以用于多种不同的调试器(例如具有运行界面的xxgdb),如果使用gdb作为调试器则可以使用-ggdb选项,其级别和-g相同,包括了一些gdb专用的信息。
不同调试级别下加入生成可执行文件的数据不同,所以会影响生成的文件的大小,以下是对同一个文件square.c使用-ggdb不同级别进行编译连接生成可执行文件square的大小区别,可以看到其大小分别是6504、6956和29872字节,说明-ggdb3加入的相关信息最多:
alloy@raspberrypi:~/linuxcupdate/chapter4$ gcc -ggdb1 square.c -o square
alloy@raspberrypi:~/linuxcupdate/chapter4$ ls -l
total 24
-rwxr-xr-x 1 alloy alloy 6504 Mar 28 00:45 square
-rw-r--r-- 1 alloy alloy 607 Mar 28 00:37 square.c
alloy@raspberrypi:~/linuxcupdate/chapter4$ gcc -ggdb2 square.c -o square
alloy@raspberrypi:~/linuxcupdate/chapter4$ ls -l
total 24
-rwxr-xr-x 1 alloy alloy 6956 Mar 28 00:45 square
-rw-r--r-- 1 alloy alloy 607 Mar 28 00:37 square.c
alloy@raspberrypi:~/linuxcupdate/chapter4$ gcc -ggdb3 square.c -o square
alloy@raspberrypi:~/linuxcupdate/chapter4$ ls -l
total 48
-rwxr-xr-x 1 alloy alloy 29872 Mar 28 00:45 square
-rw-r--r-- 1 alloy alloy 607 Mar 28 00:37 square.c
以上编译环境是基于Raspberry Pi 二代的Raspbian