要生成代码的测试覆盖率的 html 报告,一般由以下几个步骤:
--coverage
编译源代码-lgcov
来链接生成可执行文件以上是我积累的处理这个问题的经验。今天刚好有个新的系统要生成自动测试化报告,卡在了第四步,百思不得解
挨个的做了下面的确认:
ninja -v
确认 --coverage
确认在生效find . -name "*.gcno"
也可以看到 gcno 文件生成了但是运行可执行文件后,就是没有 gcda 文件产生。所以卡在了第四步,试了多遍(重新编译,重新运行)就是不行。反复确认以上的几个步骤都是没问题,一度陷入绝境…… 一直盯着屏幕看
偶然注意了一个细节,在可执行文件退出的时候 crash 了。会不会是 crash 的时候不会生成 gcda 文件呢,搜索了一下,果然如此。Fix 了退出时 Crash 的问题后,gcda 文件终于生成了。以下的几个步骤就很顺利了
虽然解决这个问题话费了一些时间,大概一个多小时,但是我有了解到了更多的细节,
--coverage
在编译时相当于选项 -fprofile-arcs -ftest-coverage
,在链接时相当于 -lgcov
gcno
文件-v
选项可以打印出每条编译或者链接的命令