本博客(http://blog.csdn.net/livelylittlefish)贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
Content
0. 序
1. 如何编译
1.1 未加入覆盖率测试选项
1.2 加入覆盖率测试选项
1.3 分析
2. 未加入覆盖率测试选项的汇编代码分析
3. 加入覆盖率测试选项的汇编代码分析
3.1 计数桩代码分析
3.2 构造函数桩代码分析
3.3 数据结构分析
3.4 构造函数桩代码小结
4. 说明
5. 小结
0.序
在"Linux平台代码覆盖率测试-GCC插桩基本概念和原理分析"一文中,我们已经知道,GCC插桩乃汇编级的插桩,那么,本文仍然以test.c为例,来分析加入覆盖率测试选项"-fprofile-arcs -ftest-coverage"前后,即插桩前后汇编代码的变化。本文所用gcc版本为gcc-4.1.2。test.c代码如下。
/**
* filename: test.c
*/
#include <stdio.h>
int main (void)
{
int i, total;
total = 0;
for (i = 0; i < 10; i++)
total += i;
if (total != 45)
printf ("Failure\n");
else
printf ("Success\n");
return 0;
}
1. 如何编译
1.1未加入覆盖率测试选项
# cpp test.c-o test.i //预处理:生成test.i文件,或者"cpp test.c > test.i"
或者
# gcc -E test.c -o test.i
# gcc-S test.i //编译:生成test.s文件(未加入覆盖率测试选项)
# as -o test.o test.s //汇编:生成test.o文件,或者"gcc -c test.s -o test.o"
# gcc -o test test.o //链接:生成可执行文件test
以上过程可参考http://blog.csdn.net/livelylittlefish/archive/2009/12/30/5109300.aspx。
查看test.o文件中的符号
# nm test.o
00000000 T main
U puts
1.2加入覆盖率测试选项
# cpp test.c-o test.i //预处理:生成test.i文件
# gcc-fprofile-arcs -ftest-coverage-S test.i //编译:生成test.s文件(加入覆盖率测试选项)
# as -o test.o test.s //汇编:生成test.o文件
# gcc -o test test.o //链接:生成可执行文件test
查看