Visual Studio 2015代码覆盖错误的文件

Jef*_*eff 5 c++ code-coverage visual-studio visual-studio-2015

我正在使用VS 2015 Enterprise,我运行了一个通用的单元测试来分析代码覆盖率.我正在查看每个函数的覆盖块列表,它们通常看起来是正确的.但是,当我右键单击一个方法 - >"转到源代码"时,在某些函数上它会转到源代码中的正确位置(相关的.cpp文件),但在其他函数上它会尝试打开头文件(源行号是正确的,但代码在.cpp文件中 - 而不是.h文件.这会影响源代码突出显示 - VS认为在.h中的功能未在.cpp中突出显示.我无法确定函数的任何差异(相同的可见性,相同的头文件和源文件),除了他们被调用的线程.知道为什么VS认为某些代码是.h而不是.cpp?

Jef*_*eff 0

显然,尽管 VS 2015 支持 C++11 功能非静态数据成员初始值设定项(它确实编译正确),但覆盖率工具却因该功能而卡住。这是 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;
};
Run Code Online (Sandbox Code Playgroud)

// .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;
}
Run Code Online (Sandbox Code Playgroud)