码迷,mamicode.com
首页 > 系统相关 > 详细

linux c 编译与调试

时间:2015-08-15 16:29:49      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

 

c语言是跨平台的,但其在windows上编译的程序是不能够在linux平台上直接执行的,需要源代码在linux平台上重新编译。
 
gcc在编译一个程序时,一般需要完成预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)过程。

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常用命令
     省略..

linux c 编译与调试

标签:

原文地址:http://www.cnblogs.com/bruce2u/p/4732600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!