开发者社区 问答 正文

GCNO是什么?

已解决

GCNO是什么?

展开
收起
胡嘞嘞 2022-07-06 17:50:50 460 分享 版权
1 条回答
写回答
取消 提交回答
  • 推荐回答

    利用Clang 分别生成源文件的AST 和IR 文件,对比发现,AST 中不存在计数指令,而IR 中存在用来记录执行次数的代码。

    覆盖率映射关系生成源码是LLVM 的一个Pass,用来向IR中插入计数代码并生成.gcno 文件( 关联计数指令和源文件)。

    image.png

    上图右侧。即为gcno 的可视化格式。

    本质上gcno 是二进制内容。需要借助gcov 工具(gcov -dump xxx.gcno)将文件转换为这种可视的格式。

    其中每个字段的含义

    函数所在文件的绝对路径(如上图红框所示)。

    • Block :0-7 代表BB 文件的编号。
    • Counter 为插桩后生成的存储执行次数的字段。
    • Source Edges 是前继。
    • Destination 是后继。
    • Lines 是指令在代码文件中行数。

    以上内容摘自《高德技术2020年刊合集》电子书,点击https://developer.aliyun.com/topic/download?id=1135可下载完成版

    2022-07-06 18:12:02
    赞同 展开评论