Linux 下 C程序编译与调试

本文总结了Linux环境下使用gcc编译C/C++程序的基础步骤,并介绍了gdb调试工具的使用方法,包括启动程序、设置断点、查看信息、分步运行和变量查看等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux下的C编程应该在我上操作系统的课程中都有所实践,但都是些关于进程方面的程序设计,而且也没有特别系统的对这方面进行练习与实践。这两天把Linux C编程这块的基础又复习以下,希望自己以后能多加练习。现在把一些基础的东西都总结以下,希望以后能多复习。


Linux下的c编程,我们主要用的编译器就是gcc。首先先把gcc回顾一下,Linux系统下的gcc编译器是一个功能强大、性能优越的编译器。gcc支持多种平台的编译,是Linux系统自由软件的代表作品。gcc不仅能支持C语言,还支持Ada语言,C++语言,Java语言,Objective C语言,Pascal语言,COBOL语言等更多的语言集的编译。gcc几乎支持所有的硬件平台,使得gcc对于特定的平台可以编译出更高效的机器码。gcc在编译一个程序的时候,一般需要完成预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linkling)过程。使用gcc编译C程序时,这些过程是使用默认的设置自动完成的,但是用户可以对这些过程进行设置,控制这些操作的详细过程。

 

我平时使用最多的语言是C和C++,所以在这里我只是对这两种语言的编译过程进行总结。

 

 

 

C程序的编译


C程序的后缀名是.C,gcc可以将一个C程序的语文件编译成一个可执行程序。


??? 注意!!! :书上写了一句话,编译以后的程序需要添加可执行的权限才可以运行。即chmod +x ***.out。但是经过上机的验证,我们根本不用打这条命令,生成的.out文件默认就是的可执行文件。

 

打开终端,用cd命令进到.c文件所在的目录中,输入下面的命令,将这个代码文件编译成可执行程序 gcc test.c。这时系统默认生成一个可执行文件 a.out。输入下面的命令,运行这个程序 ./a.out (./代表当前的目录路径)。

 

默认情况下,gcc编译出的程序为当前目录下的文件 a.out。-o参数可以设置输出的目标文件。 例如下面的命令,可以设置将代码编译后生成可执行程序do:gcc a.c -o do。也可以将可执行的文件放到其他的目录中。例如下面的命令就是将目录文件设置成/usr目录下的文件do: gcc a.c -o /usr/do

 

参数-v可以查看程序的编译过程和显示已经调用的库。从显示的编译过程可以知道,gcc自动加载了系统的默认配置,调用系统的库函数完成了程序的编译过程。

 

注意: gcc可以对多种语言编写的源代码。如果源代码的文件扩展名不是默认的扩展名,gcc就无法编译这个程序。可以用-x选择来设置程序的语言。例如有一个c文件我们保存时为a.u,.u不是C的默认扩展名,而我们又想对其进行编译。这时用-x参数设置编译的语言,输入以下的命令来编译这个程序:gcc -x ‘c’ a.u 。这样就可以正常地编译文件a.u。

 

C++程序的编译

 

gcc可以编译C++程序。编译C++程序和C程序时,使用的是不同的命令。编译C++程序时,使用的命令是g++。该命令的使用方法语gcc是相似的。例如要编写一个C++程序test.cpp可以使用以下的命令来完成:g++ test.cpp -o do。

 

 

 

gdb调试程序

 

gdb是一个功能强大的调试工具,可以用开调试C程序或C++程序。在使用这个工具进行程序调试时,主要使用了gdb进行下面5个方面的操作:

(1)启动程序:在启动程序时,可以设置程序运行环境。

(2)设置断点:断点就是可以在程序设计时暂停程序运行的标记。程序会在断点处停止,用户便于查看程序的运行情况。这里的断点可以是行数、程序名称或条件表达式。

(3)查看信息:在断点停止后,可以查看程序运行的信息和显示程序变量的值。

(4)分步运行:可以使程序一个语句一个语句的执行,这时可以及时地查看程序的信息。

(5)改变环境:可以在程序运行时改变程序的运行环境和程序变量。

 

在程序中加入调试信息:为了使用gdb进行程序的调试,需要在编译程序中加入供gdb使用的调试信息。方法是在编译程序时使用一个-g参数。例如需要对a.c文件进行调试,在终端中输入下列的命令:gcc -g -o a.debug a.c(或 gcc -g a.c -o a.debug 都可以)。

 

启动gdb:在调试文件以前,需要启动gdb,在终端输入下面的命令:gdb。这时,gdb启动并显示了gdb的版本和版权信息。

 

在gdb中加载需要调试的程序:使用调试一个程序之前,需要加载这个程序。加载的程序的命令是file。如加载a.debug程序, file a.debug

 

在gdb中查看代码:用gcc命令编译了程序加入了-g命令以后,编译后的a.debug程序中加入了默认的断点。可以用list命令显示程序的源代码和断点。

 

在程序中加入断点:程序会运行到断点的位置停止下来,等待用户处理信息或者查看中间变量。如果自动设置的断点不能满足调试要求,可以用break命令增加一个断点。例如需要在程序的第6行增加一个断点,可以输入下面的命令:break 6

 

查看断点:命令info breakpoint 可以查看程序中设置的断点(所有断点的信息)。加上相应的断点编号,可以查看这一个断点的信息。

 

运行程序:gdb中的run命令可以使这个程序以调试的模式运行。next命令,是一条一条的进行运行;continue命令,程序运行到下一个断点的位置停下;step命令也是一条一条的执行,与next命令的作用相似,对程序实现单步运行。不同之处在于,在遇到函数调用时,step函数可以进行到函数内部。而next函数只是一步完成函数的调用。

 

变量的查看:程序在使用run命令后,在某一个断点处停止,只是可以用print命令对变量的值进行查看。若要查看i变量的值:print i。

 

结束gdb:完成了调试运行以后,输入“q“命令,退出gdb。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值