Visual Studio 2015 代码覆盖错误文件
Posted
技术标签:
【中文标题】Visual Studio 2015 代码覆盖错误文件【英文标题】:Visual Studio 2015 Code Coverage Wrong File 【发布时间】:2016-02-24 19:27:46 【问题描述】:我正在使用 VS 2015 Enterprise,我运行了一个通用单元测试来分析代码覆盖率。我正在查看每个函数的覆盖块列表,它们通常看起来是正确的。但是,当我右键单击一个方法 - >“转到源代码”时,在某些函数上它会转到源代码中的正确位置(相关的 .cpp 文件),但在其他函数上它会尝试打开头文件(源代码行号是正确的,但代码在 .cpp 文件中——而不是 .h 文件中)。这会影响源代码突出显示——VS 认为在 .h 中的函数不会在 .cpp 中突出显示。我无法确定函数的任何区别(相同的可见性、相同的头文件和源文件),除了调用它们的线程。知道为什么 VS 认为某些代码在 .h 而不是 .cpp 中吗?
【问题讨论】:
minimal reproducible example 会有所帮助。你在使用模板函数吗? 我同意。没有模板函数。 项目是 x64 还是 x86?我记得 x64 存在问题。 【参考方案1】:显然,即使 VS 2015 支持 C++11 功能 non-static data member initializers(它确实可以正确编译),覆盖工具也会在此功能上窒息。这是MCVE。我正在使用 VS 14.0.24720.00 Update 1。要重现,编译该程序,然后通过使用 Generic Test 运行它来获得代码覆盖率。如果x
已初始化,则覆盖工具会在.h 文件中查找构造函数的代码。如果取出= 0
,它会正确识别.cpp 中的构造函数定义。在我的产品代码中,它不是构造函数,而是覆盖工具认为在 .h 文件中定义的看似随机的函数。就我而言,修复只是将数据成员初始化移动到构造函数初始化列表。
//.h
class Test
public:
Test();
~Test();
void Func1();
void Func2();
void Func3();
int x = 0;
;
.
// .cpp
#include "Test.h"
#include <iostream>
Test::Test()
std::cout << "in Test()" << std::endl;
Test::~Test()
void Test::Func1()
std::cout << "in Func1" << std::endl;
Func2();
Func3();
void Test::Func2()
std::cout << "in Func2" << std::endl;
void Test::Func3()
std::cout << "in Func3" << std::endl;
【讨论】:
以上是关于Visual Studio 2015 代码覆盖错误文件的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2015:C++ 代码分析错误 C1253,无法加载模型文件“res://mspft140.dll/300”
Visual Studio 2015 中的错误:错误 MSB4166:子节点“3”过早退出。关机
在 Visual Studio 2015 TACo 上获取 Cordova 插件集成的构建错误