Linux平台代码覆盖率测试-编译过程自动化及对链接的解释

2014-11-24 09:02:02 · 作者: · 浏览: 1

Content


0.


1. 生成各个文件的步骤


1.1 未加入覆盖率测试选项


1.1.1 编译步骤


1.1.2 目标文件的符号表


1.2 加入覆盖率测试选项


1.2.1 编译步骤


1.2.2 目标文件的符号表


1.3 gcc verbose选项


2. 编译自动化


2.1 使用collect2makefile


2.2 不使用collect2makefile


3. 关于链接的讨论


3.1 链接顺序讨论


3.2 错误链接顺序的例子


4. 额外的话


5. 小结




0.




——这将是本文讨论的重点。本文gcc版本为gcc-4.1.2



1. 生成各个文件的步骤



1.1 未加入覆盖率测试选项



1.1.1 编译步骤



(1) 预处理:生成test.i文件



# cpp test.c -o test.i //或者


# cpp test.c > test.i //或者


# gcc -E test.c -o test.i



(2) 编译:生成test.s文件



# gcc -S test.i



(3) 汇编:生成test.o文件



# as -o test.o test.s //或者


# gcc -c test.s -o test.o



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



# gcc -o test test.o



或者,


/usr/lib/gcc/i386-redhat-linux/4.1.2/../../..就是/usr/lib,因此,也可以简写为。


1.1.2 目标文件的符号表



可通过如下命令查看test.o中的符号表。//后是笔者加入的注释。




1.2 加入覆盖率测试选项



1.2.1 编译步骤



步骤同上,只是在编译生成test.s文件时加上"-fprofile-arcs -ftest-coverage"覆盖率测试选项即可。



另外,使用collect2的链接步骤稍有不同,需要链接gcov静态库(libgcov.a)。如下。


或者简写为。


当然,命令亦会完成链接并生成可执行文件。


# gcc -o test test.o -lgcov



libgcov.a位于/usr/lib/gcc/i386-redhat-linux/4.1.2目录。



1.2.2 目标文件的符号表



看看加入覆盖率测试选项后的目标文件test.o中的符号表。


1.3 gcc verbose选项



这是如何知道的呢?——gcc命令-v选项即可。


# gcc -v test.c [-o test]


# gcc -fprofile-arcs -ftest-coverage -v test.c [-o test]


[]表示出现0次或1次。


-v,即verbose选项,以下是 中的解释,原文更贴切,此处不翻译。