GCC Coverage代码分析-基本块图、插桩位置及桩代码执行分析

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

Content

0.

1. 基本块概念

2. 基本块图及插桩点分析

2.1 基本块图

2.2 有效基本块图

2.3 带桩点信息的有效基本块图

2.4 插桩位置及桩代码执行情况分析

3. 小结

Appendix:源代码中对Basic Block的解释

 

 

0.

 

由前面几篇文章,例如:

Linux平台代码覆盖率测试-gcov-dump原理分析

Linux平台代码覆盖率测试-.gcda/.gcno文件及其格式分析

Linux平台代码覆盖率测试-GCC插桩基本概念及原理分析

Linux平台代码覆盖率测试-GCC插桩前后汇编代码对比分析

 

我们已经知道了代码覆盖率测试的一些相关概念,例如Basic BlockArcs等。本文重点叙述这些基本概念,并仍以前面的test.c为例说明基本块图(Basic Block Graph)及插桩点。

 

本文所用gcc版本为gcc-4.1.2test.c代码如下。

00001:#include
00002:
00003:intmain(void)
00004:{
00005:   inti,total;
00006:
00007:   total=0;
00008:
00009:   for(i=0;i<10;i++)
00010:   total+=i;
00011:
00012:   if(total!=45)
00013:       printf("Failure/n");
00014:   else
00015:       printf("Success/n");
00016:   return0;
00017:}
00018:

1.基本块概念

 

通过基本块的划分,可以把程序分为一组代码段,每一段代码中的第一条语句被执行,则整段代码都被执行一次。

 

那么,什么是基本块(Basic Block)

 

基本块

  • 程序中一个顺序执行的语句序列
  • 只有一个出口语句和一个入口语句
  • 执行时只能从入口语句入,从出口语句退出
  • 基本块中的所有语句的执行次数一定是相同的
  • 一般由多个顺序执行语句后跟一个跳转语句组成

 

因此,基本块的最后一条语句一定是一个跳转语句,且跳转的目的地一定是另一个基本块的第一条语句。如果跳转语句是有条件的,就产生了一个分支(arc),该基本块就有两个基本块作为目的地。如果把每个基本块当作一个节点,那么一个函数中的所有基本块就构成了一个有向图,称之为基本块图(Basic Block Graph)。且只要知道图中部分BBarc的执行次数就可以推算出所有的BB

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值