gcc调试总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用GCC编译与GDB调试
一:VMwareTools安装过程
1.sudo apt-get update
2.sudo apt-get dist-upgrade
3. 3.sudo apt-get install build-essential
4.sudo apt-get install linux-headers-3.0.0-29-generic-pae
5.Ubuntu与windows间的文件共享
(选择VM中设置,选项,共享文件夹,添加路径,如果不能在Ubuntu下的
/mnt/hgfs下找到共享文件夹还需安装
Sudo apt-get instatll open-vm-dkms
Sudo mount -t vmhgfs .host:/ /mnt/hgfs
二:C 编程中相关文件后缀
.a 静态库(archive)
.c C源代码(需要编译预处理)
.h C源代码头文件
.i C源代码(不需编译预处理)
.o 对象文件
.s 汇编语言代码
.so 动态库
三:Gcc的执行过程
gcc and g++分别是gnu的c & c++编译器gcc/g++在执行编译工作的时候,总共需要4步
1.预处理,生成.i的文件[预处理器cpp]
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4.连接目标代码,生成可执行程序[链接器ld]
四. 常用编译命令选项
假设源程序文件名为test.c。
1.无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。
-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项-c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。
7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
五. 多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1.多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译
六:gcc的各种命令
1.查看gcc参数gcc --help
2.设置输出的文件gcc hello.c -o do
3.查看编译过程gcc -v hello.c
七:gdb 调试程序
1.所谓调试,指的是对编好的程序用各种手段进行查错和排错的过程。进行这种查错处理
时,并不仅仅是运行一次程序检查结果,而是对程序的运行过程、程序中的变量进行各种分
析和处理。本节将讲解使用gdb进行程序的调试。
Gdb主要进行下面5个方面的操作。
1)启动程序:在启动程序时,可以设置程序运行环境。
2)设置断点:断点就是可以在程序设计时暂停程序运行的标记。程序会在
断点处停止,
3)用户便于查看程序的运行情况。这里的断点可以是行数、程序名称或条件表
达式。
4)查看信息:在断点停止后,可以查看程序的运行信息和显示程序变量的
值。
5)分步运行:可以使程序一个语句一个语句的执行,这时可以及时地查看
程序的信息。
6)改变环境:可以在程序运行时改变程序的运行环境和程序变量。
2.在gdb中加载需要调试的程序
file a.debug
(1)用gcc 命令编译程序加入了-g 命令以后,gcc -g -o a.debug a.c编译后的a.debug 程序中加入了断点。可以用list(无法再终端运行出来出来时,首先使用
file a.debug命令其次在使用list命令)
命令显示程序的源代码和断点。下面的步骤是查看加入断点以后的代码。
在(gdb)提示符后面输入下面的命令。
(2)在程序中加入断点,例如break 6
(3)查看断点info breakpoint 4
(4)运行程序在(ddb)提示符后输入“run”命令
这时输入“next”命令,程序会在下一行停下,输入“continue”命令,程序会在下一个断点的位置停下
(5)变量的查看print 命令可以在程序的运行中查看一个变量的值,例如print i 3.程序调试实例
1.编写一个test.c实例使用gdb进行调试
2.使用gcc -g命令生产test.debug。
3.进入gdb,输入待调试文件file test.debug,使用list 1命令查看断点,使用break增加断点,使用step查看下一步,不断进行调试查找出错地方,最终改正错误,重新使用gcc进行编译,最后使用./a.out运行出来
gdb 常用命令
除了前面讲述的gdb 命令以外,gdb 还有很多种命令。这些命令可以完成程序调试的各
种功能。其他的常用命令含义如下所示。
backtrace:显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)。
breakpoint:在程序中设置一个断点。
cd:改变当前工作目录。
clear:删除刚才停止处的断点。
112
Linux 系统下C 程序开发详解
commands:命中断点时,列出将要执行的命令。
continue:从断点开始继续执行。
delete:删除一个断点或监测点,也可与其他命令一起使用。
display:程序停止时显示变量和表达式。
down:下移栈帧,使得另一个函数成为当前函数。
frame:选择下一条continue 命令的帧。
info:显示与该程序有关的各种信息。
info break:显示当前断点清单,包括到达断点处的次数等。
info files:显示被调试文件的详细信息。
info func:显示所有的函数名称。
info local:显示当函数中的局部变量信息。