GCC编译器和GDB调试器

GCC编译器

GCC(GNU Compiler Collection) 是目前Linux下最常用的c语言编译器,它是GNU项目中符合ANSI C标准的编译系统,可以在多种硬件平台上编译出可执行程序的超级编译器,执行效率与一般的编译器相比平均效率要高20%~30%。

基本用法

在终端中输入下列命令:
gcc options filename
其中,filename为要操作的*.c文件,options是编译器所需要的参数,有以下几个:

  • -c
    只编译,不链接成可执行文件。编译器只是由输入的*.c等源程序生成*.o目标文件。

  • -o output_filename
    生成可执行文件output_filename。例如需运行下列c程序(冒泡排序算法)。

//文件名为test.c,存放在home/sywyg/test中
//生成的可执行文件为test,存放在同一目录下
#include
void BubbleSort(int *data,int count){
    int temp,i,j;
    for(i=0;i<count;i++){
        for(j=count-1;j>0;j--){
            if(data[j]1]){
                temp=data[j-1];
                data[j-1]=data[j];
                data[j]=temp;
            }
        }
    }
}
int main()
{
    int i;
    int data[]={8,9,5,3,2,6,7,4,1};
    BubbleSort(data,9);
    for(i=0;i<9;i++){
        printf("%d",data[i]);
    }
    printf("\n");
    return 0;
}

执行过程如图1:
GCC编译器和GDB调试器_第1张图片
图1GCC编译过程

  • -g
    产生符号调试工具(GDB)所必要的符号资讯。若对源文件进行调试,必须加上这个参数。

  • -O
    对程序进行优化编译链接,产生的可执行文件效率可以提高,但时间较慢。
    -O2
    比-O更优,时间更长。

GDB调试器

启动调试程序

使用GDB调试程序时,首先GDB需要获得程序的信息,因此需在编译是使用参数-g。编译命令如下:

gcc -g -o 可执行文件名(test) 源程序文件名(test.c)

接着可以使用下列命令加载可执行文件进行调试:

gdb 可执行文件名(test)

同样以上面的c程序举例,上述命令如图2。
GCC编译器和GDB调试器_第2张图片
图2gdb调试1
此时进入到GDB调试工具中,GDB有以下常见命令:

  • run
    运行命令(每次从头开始),在遇到特殊情况(例如断点)时停止。
  • break
    断点命令。有以下三种情况:
1.break i //表示在第i行设置断点
2.break function() //表示在进入函数function()处设置断点
3.break i/function() if A //表示满足条件A时运行到i/function()设置断点

在断点后可使用continue命令执行断点后的程序,直到遇到下一次特殊情况。

  • next
    单步执行程序命令(会跳过子函数)
  • step(快捷键s)
    单步执行子函数语句。
  • print
    显示变量或表达式的值
  • display
    显示变量或表达式的值,与print不同点在于每次遇到都会显示该表达式的值。使用disable/enable display 使display失效/恢复
  • list
    显示部分源代码
  • watch
    监视变量或表达式,一旦被监视对象的值发生改变,程序就会改变
  • kill
    终止正在调试的程序
  • quit
    退出GDB调试器
    小技巧:使用Tab键能够智能提示命令,帮你补全命令。

注:本文内容部分借鉴明日科技编著的《Linux C 从入门到精通》。

你可能感兴趣的:(Linux,C)