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 插件集成的构建错误

Visual Studio 2015 中的宏参数限制

visual studio 2015下python编程的中文字符串问题

Visual Studio 2013 错误 MS8020 Build tools v140 找不到