Content
1. 序
2. gcov-dump原理分析
2.1 gcov-dump程序结构
2.2 dump_file函数分析
2.3 处理各种tag的callback定义
2.4 基本读取函数gcov_read_words
2.5 分配空间函数gcov_allocate
2.6 重要数据结构gcov_var
3. 处理tag的callback分析
3.1 FUNCTION tag: tag_function()函数
3.2 BLOCKS tag: tag_blocks()函数
3.3 ARCS tag: tag_arcs()函数
3.4 LINES tag: tag_lines()函数
3.5 COUNTER tag: tag_counters()函数
3.6 OBJECT/PROGRAM SUMMARY tag: tag_summary()函数
4. 小结
1. 序
——这就是gcov-dump程序。
gcov-dump是一个dump程序,输入是一个gcov的文件,或者.gcda,即gcov的data文件;或者.gcno,即gcov的note文件。
2. gcov-dump原理分析
2.1 gcov-dump程序结构
2.2 dump_file函数分析
gcov-dump程序的主函数main,是靠调用dump_file()函数来完成文件内容的输出。该函数定义如下。其中的注释为笔者所加。
dump_file函数首先通过gcov_open打开.gcda/.gcno文件,将文件信息保存到全局变量gcov_var(稍后介绍该变量),接着读取文件头信息,包括magic,version,stamp,然后循环读取每个tag,length,并通过函数指针处理该tag,直到文件结束(0x00000000)。下面介绍各种tag的callback。
2.3 处理各种tag的callback定义
处理tag的callback函数定义如下。
其类型tag_format_t为一个结构,分别由tag本身,tag name和处理该tag的函数指针组成,定义如下。