关于gcov/gcovr按函数汇总分支信息的技术咨询
关于gcov/gcovr按函数汇总覆盖率信息的解决方案
gcovr的
--html-details选项生成的详细HTML报告,天然是按「文件→函数」的层级组织的。每个函数块下会清晰展示对应的语句覆盖、判定覆盖和分支覆盖数据,分支信息完全绑定在所属函数的上下文里,不会脱节。打开报告后展开对应函数,就能看到所有关联的分支覆盖详情。你试过的JSON格式其实已经包含函数级的分支数据,可能是解析时没找对层级。gcovr的JSON结构里,
files数组下每个文件对象包含functions数组,每个函数对象里的branches字段就是该函数的所有分支信息,同时还有lines(语句覆盖)、conditions(判定覆盖)字段,完全支持按函数汇总的需求。举个简化的结构示例:{ "files": [ { "filename": "demo.c", "functions": [ { "name": "calc_sum", "branches": [{"line_number": 10, "taken": 2}, ...], "lines": [{"line_number": 5, "count": 10}, ...], "conditions": [{"line_number": 8, "covered": true}, ...] } ] } ] }要是倾向原生工具输出,直接用
gcov生成的.gcov文件本身就是按函数、代码行排列的,分支信息会标注在对应代码行的旁边,和函数上下文绑定紧密,解析这类文件也能提取出函数级的汇总数据。
如果现有格式不符合需求,完全可以基于gcovr的JSON输出做二次处理:遍历每个文件的函数列表,对每个函数统计语句覆盖数、判定覆盖数、分支覆盖数,就能生成类似Cantata++的报告结构。
内容的提问来源于stack exchange,提问作者A. Kern
相关产品推荐
相关产品推荐

