在C++代码中找到未实例化模板的最佳方法是什么?在C++代码中查找非实例化模板
我有一个大量使用模板的代码库。 当然,我们要确保测试覆盖率很高。 对于所有使用的代码,这可以很好地使用gcov
。
但是,未使用的模板被报告为gcov
不可执行。
一些google搜索后,似乎没有办法强迫g++
发出代码为这些模板(这是唯一合乎逻辑的,编译器应该怎么猜到的任何类型?) 似乎也没有办法让gcov将未被证实的模板代码识别为可运行代码。
是否有任何“开箱即用”的功能允许我扩充由GCC -ftest-coverage -fprofile-arcs
仪器生成的文件?通过gcov option documentation of GCC,将整个模板函数体标记为一个块可能就足够了,因为执行永远不会结束。
编辑(背景信息):我正在研究仅标题模板库。 我的目标是找到未使用/未经测试的功能。
我知道代码覆盖率有缺陷,但发现无实际代码是朝着更好的测试代码迈出的非常重要的一步。 目前,我们将检查点宏放在每个函数的开头。 在测试模式下,它们扩展为将一对(file, line)
插入全局通过的检查点集的代码。 运行测试后,我们手动读取所有文件,并将所达到的检查点与所有可用检查点的集合进行比较。
查找未经实例化的代码很重要,例如,由于C++模板优先级不直观的行为,因此可能存在读者甚至作者期望使用的死代码。
您的意思是从不为任何类型实例化的模板类/结构体/函数? – Xeo 2011-04-25 21:28:05
@Xeo:是的,这就是我的意思。 – Manuel 2011-04-25 21:28:45
我不确定你问的问题对我有意义。编译器仅为所使用的类型实例化模板。如果某些给定类型从未用于该模板,那么该特定实例化将不存在于目标代码级别。 – greatwolf 2011-04-25 21:31:59