【问题标题】:interpret gcov output to identify basic blocks解释 gcov 输出以识别基本块
【发布时间】:2013-09-03 06:25:37
【问题描述】:

我正在使用带有选项 -a (--all-blocks) 的 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 只有第二个,并且在第 10 行它识别了两个块。

【问题讨论】:

    标签: c gcc gcov


    【解决方案1】:

    块号是行本地的。第 7 行上的 block 0 表示“第 7 行的第 0 块”等。只有当一行有两个或更多块时,你才有 block 1,就像第 10 行一样。

    区块编号仅显示在该区块的最后一行。

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

    【讨论】:

    • 你能识别出第 10 行的两个块吗?这个标志是什么意思“$$$$$”?
    • 一个块是else部分,另一个可能是return-from-main(没有自己的行)。 $$$$$ 标记未执行的块(不是行)。
    • 您好!我想知道是否可以将这些“笨拙”的源代码级基本块表示映射回 GIMPLE 代码。如果可行的话,你会怎么想?
    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 2011-09-02
    • 2015-08-15
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多