2013-08-30 89 views
2

我使用的gcov与选项-a来标识基本块( - 全块),其从该手册:解释gcov输出,

When you use the -a option, you will get individual block counts 

原始文件:

#include <stdio.h> 
#include "file1.h" 

int max(int a , int b) 
{ 
    int k = 0; 
    if (a > b) 
    return a; 
    else 
    return b; 
} 

的gcov文件如下:

-: 0:Source:file1.c 
    -: 0:Graph:file1.gcno 
    -: 0:Data:file1.gcda 
    -: 0:Runs:1 
    -: 0:Programs:1 
    -: 1:#include <stdio.h> 
    -: 2:#include "file1.h" 
    -: 3: 
    -: 4:int max(int a , int b) 
    1: 5:{ 
    1: 6: int k = 0; 
    1: 7: if (a > b) 
    1: 7-block 0 
    1: 8: return a; 
    1: 8-block 0 
    -: 9: else 
    1: 10: return b; 
$$$$$: 10-block 0 
    1: 10-block 1 
    -: 11:} 
    -: 12: 
    -: 13: 

我找不到有关gcov输出格式的任何信息。从原始代码我可以识别3个基本块,但gcov只有数字2,也在第10行识别两个块。

回答

1

块号在本地一行。第7行的block 0表示“第7行的第0块”等。只有当一行有两个或更多个块时,才有block 1,如第10行的情况。

块号显示在最后一行仅限块。

因此,您的程序有4个区块,其中两个在第10行。

+0

您可以识别第10行的两个区块吗?这个符号是什么意思“$$$$$”? – user847988

+0

其中一个块是else部分,另一个块可能是从主返回(没有自己的行)。 $$$$$标记未执行的块(不是行)。 –