【Linux c编程摘要】 编译与调试

c语言是跨平台的,但其在windows上编译的程序是不能够在linux平台上直接执行的,需要源代码在linux平台上重新编译。

gcc在编译一个程序时,一般需要完成预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)过程。

词法分析、语法分析、中间代码生成、代码优化、生成目标程序。

yum -y install gcc gcc-c++

其中gcc-c++为g++

1、编译

   gcc a.c          gcc a.c -o do

  默认生成a.out可执行文件

2、给程序添加可执行权限

chmod +x a.out

3、执行程序

 ./a.out

4、查看编译过程

参数-v可以查看程序的编译过程和显示已经调用的库。

gcc -v a.c

设置编译的语言

-x 参数  (小写)

cp a.c a.u

gcc -x 'c' a.u

5、编译过程的控制

(1)控制预处理过程

    gcc -E -o a.cxx a.c

   将预处理的结果保存到a.cxx文件中

 (2)生成汇编代码

   gcc -S -o a.s a.c

 生成汇编文件a.s

  (3)生成目标代码

   gcc -c -o a.o a.c

  (4)链接生成可执行文件

  gcc a.o -o aa.out

  生成 可执行文件 aa.out

可用file命令查看文件信息,如

file aa.out

输出:

aa.out: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

6. gdb 调试程序

gdb是一个功能强大的调试工具,可以用来调试c/c++程序。

在使用gdb调试程序时,主要进行下面5个操作:

a. 启动程序

b.设置断点

c.查看信息

d.分步执行

e.改变环境

(1)在程序中加入调试信息

为了使用gdb调试程序,需要在编译程序的时候加入调试信息,方法是在编译时使用-g参数

  gcc -g -o a.debug a.c

(2)在调试程序前,需要启动gdb。

直接输入gdb

在gdb中加载需要调试的程序

在(gdb)提示符后:

(gdb) file /home/bruce/c/a.debug

Reading symbols from /home/bruce/c/a.debug...done.

(3)在gdb中查看代码

  可以用list命令显示程序的源代码和断点

e.g.  

     list 1   //显示第一个断点前的源代码

接着按“Enter"键,显示下一个断点以前的源代码 

(4)在程序中加入断点

如果自动加入 的断点不能够满足调试要求,可以用break命令增加调试的断点。

e.g.

   break 6

//在程序的第6行增加一个断点

  (5)查看断点

   命令info breakpoint 显示程序中所有设置的断点。

(gdb) info breakpoint

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0x080483ff in max at a.c:6

2       breakpoint     keep y   0x080483ff in max at a.c:6

3       breakpoint     keep y   0x08048412 in main at a.c:18

(gdb) break 19

Breakpoint 4 at 0x804841a: file a.c, line 19.

(gdb) info breakpoint

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0x080483ff in max at a.c:6

2       breakpoint     keep y   0x080483ff in max at a.c:6

3       breakpoint     keep y   0x08048412 in main at a.c:18

4       breakpoint     keep y   0x0804841a in main at a.c:19

   (6)运行程序

          run

  程序会在第一个断点停下,输入next会进入下一行。

  输入continue,则会在下一个断点处停下。

  

   命令step也可以程序单步运行,其与next不同的时,当遇到一个函数调用,step可以进入函数内部,而next则会一步执行完函数调用。

    (7)变量查看

print 命令可以在程序运行过程中查看一个变量的值。

gdb-> file a.debug -> run -> print i -> next -> print i

     (8)退出

  完成程序的高度后,输入 q ,退出gdb.

     (9)gdb常用命令

猜你喜欢

转载自blog.csdn.net/dongshengliao/article/details/81588516
今日推荐