gpt4 book ai didi

c++ - Visual Studio 2015 代码覆盖错误文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:31 24 4
gpt4 key购买 nike

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

最佳答案

显然,即使 VS 2015 支持 C++11 功能 non-static data member initializers (它确实编译正确),覆盖工具在此功能上窒息。这是 MCVE。我正在使用 VS 14.0.24720.00 更新 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;
}

关于c++ - Visual Studio 2015 代码覆盖错误文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com