在 C++ 代码中查找未实例化模板的最佳方法是什么?
我有一个大量使用模板的代码库。当然,我们要确保测试覆盖率很高。对于所有使用过的代码,使用gcov
.
但是,未使用的模板被报告为不可执行gcov
。
经过一番谷歌搜索,似乎没有办法强制g++
为这些模板发出代码(这只是合乎逻辑的,编译器应该如何猜测任何类型?)似乎也没有办法让 gcov 识别未实例化的模板代码作为可运行代码。
有什么“开箱即用”的东西可以让我扩充 GCC-ftest-coverage -fprofile-arcs
仪器生成的文件吗?根据GCC 的 gcov 选项文档,将整个模板函数体标记为一个块可能就足够了,因为执行永远不会在那里结束。
编辑(背景信息):我正在开发一个只有标题的模板库。我的目标是找到未使用/未经测试的功能。
我知道代码覆盖率是有缺陷的,但是找到未实例化的代码是朝着更好地测试代码迈出的非常重要的一步。目前,我们将检查点宏放在每个函数的开头。在测试模式下,它们扩展为将一对插入(file, line)
到一组已通过检查点的全局代码。运行测试后,我们手动读取所有文件并将到达的检查点与所有可用检查点的集合进行比较。
查找未实例化的代码很重要,例如,由于不直观的 C++ 模板优先行为,可能会有读者甚至作者希望使用的死代码。