2010-10-28 54 views
2

我们使用AQTime的覆盖率分析器来检查单元测试的覆盖率结果。它似乎一般工作没问题,但有一个讨厌的习惯高估覆盖面,因为一些功能根本没有出现。我认为这是因为链接器已经剥离了它们,因为它们没有被调用,但显然它并不理想,因为我希望它们显示为“未覆盖”。如何防止功能从覆盖分析中排除?

有谁知道是否有办法配置Visual C++或AQTime,这些函数将被正确标记为“未覆盖”?

回答

1

奇数。编译器/链接器是否剥离它们,事实是,在测试执行结束时,它们没有被执行的记录。所以如果这个工具可以列出所有的功能,它应该没有这样的证据,因此它应该报告“未执行”。

我们的SD C++ Test Coverage工具没有这种奇怪的行为,至少不是如果您实际指定包含那些应该被检测的编译单元或头文件的一部分的话。 (你可能无法列出包含一个函数体的ah头文件,那么它将不会被报告)。它甚至会报告一个已经被内联的函数已经被执行,而不管它已经被内联的地方的数量。

3

AQtime从模块的调试信息中获取例程列表。由于链接器已经剥离了一些例程,因此它们没有调试信息,AQtime也不会“看到”它们。

通常,所有链接器都可以选择启用/禁用此功能。例如,在Visual C++项目中,此选项名为参考文献并位于链接器|优化属性组。删除此选项的值或将其设置为否(/ OPT:NOREF)在您的应用程序的调试配置和链接器不会删除未使用的功能。该选项记录在here

+0

非常感谢您的回答 - 听起来它会是相当理想的。不幸的是,我已经离开了那份工作,在我目前的工作中,我不再有权限访问Visual Studio或AQTime的副本来确认它:( – Peter 2012-04-15 15:34:53