2016-02-24 3 views
5

Я использую VS 2015 Enterprise, и я провел общий модульный тест для анализа покрытия кода. Я просматриваю список закрытых блоков для каждой функции, и они, как правило, кажутся правильными. Однако, когда я нажимаю правой кнопкой мыши метод -> «Перейти к исходному коду», некоторые функции идут в нужное место в исходном коде (соответствующий .cpp-файл), но на других он пытается открыть файл заголовка (номер исходной строки верен, но код находится в файле .cpp, а не в файле .h). Это влияет на выделение исходного кода - функции, которые VS думает в .h, не выделяются в .cpp. Я не могу определить разницу в функциях (одинаковая видимость, те же заголовочные и исходные файлы), за исключением, может быть, какого потока они вызываются. Любая идея, почему VS думает, что какой-то код находится в .h, а не .cpp?Visual Studio 2015 Code Coverage Неверный файл

+0

[mcve] поможет. Вы используете шаблонные функции? – AndyG

+0

Согласен. Нет шаблонных функций. – Jeff

+0

Является ли проект x64 или x86? Я помню, что есть проблемы с x64. – AndyG

ответ

0

Очевидно, несмотря на то, что 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; 
} 
Смежные вопросы