PC6下载站

分类分类

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

关注+2011-07-12作者:清晨

15 页 BLOCKS tag: tag_blocks() 函数

 

3.2 BLOCKS tag: tag_blocks() 函数

static void

tag_blocks ( const char * filename ATTRIBUTE_UNUSED ,

unsigned tag ATTRIBUTE_UNUSED , unsigned length ATTRIBUTE_UNUSED )

{

    unsigned n_blocks = GCOV_TAG_BLOCKS_NUM ( length );

    printf ( " %u blocks" , n_blocks );

 

    if ( flag_dump_contents )

    {

        unsigned ix ;

        for ( ix = 0 ; ix != n_blocks ; ix ++ )

        {

            if ( ! ( ix & 7 ))  // 如果 blocks 较多,则每 8 个为 1 行输出,且按 0 , 8 , 16 , ... 输出序号

            {

                printf ( "/n" );

                print_prefix ( filename , 0 , gcov_position ());

                printf ( "/t/t%u" , ix );  // 输出序号

            }

            printf ( " %04x" , gcov_read_unsigned ());

        }

    }

}  

其中, flag_dump_contents 是打印开关, flag_dump_contents 非 0 时将打印 COUNTER 的内容。

输出格式:

    n blocks

    0 block0 block1 ... block7   // 每 8 个 1 行输出,前面的 0 表示序号

    8 block8 block9 ... block15  // 前面的 8 表示序号

    ...

当然,需要注意前导符或者输出位置。

 

3.3 ARCS tag: tag_arcs() 函数

static void

tag_arcs ( const char * filename ATTRIBUTE_UNUSED ,

unsigned tag ATTRIBUTE_UNUSED , unsigned length ATTRIBUTE_UNUSED )

{

    unsigned n_arcs = GCOV_TAG_ARCS_NUM ( length );

    printf ( " %u arcs" , n_arcs );  // 输出提示信息,几个 arcs

 

    if ( flag_dump_contents )

    {

        unsigned ix ;

        unsigned blockno = gcov_read_unsigned ();

 

        for ( ix = 0 ; ix != n_arcs ; ix ++ )

        {

            unsigned dst , flags ;

            if ( ! ( ix & 3 ))  // 如果 arcs 较多,则每 4 个为 1 行输出,且每行前面输出 blockno

            {

                printf ( "/n" );

                print_prefix ( filename , 0 , gcov_position ());

                printf ( "/tblock %u:" , blockno );

            }

 

            dst = gcov_read_unsigned ();   // 读取目的 blockno

            flags = gcov_read_unsigned ();

            printf ( " %u:%04x" , dst , flags );

        }

    }

}

输出格式:

    n arcs   //n 个 arcs ,每 4 个为 1 行输出

    blockno: dst0:flags0 dst1:flags1 dst2:flags2 dst3:flags3

    blockno: dst4:flags4 dst5:flags5 dst6:flags6 dst7:flags7

    ...

同上,需要注意前导符或者输出位置。 dst0, ..., 表示目的 block 的 blockno 。

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消