2016-02-24 19 views
5

Korzystam z Enterprise VS 2015 i przeprowadziłem test jednostki ogólnej, aby przeanalizować zasięg kodu. Patrzę na listę objętych bloków na funkcję i ogólnie wydają się poprawne. Jednak po kliknięciu prawym przyciskiem myszy metody -> "Przejdź do kodu źródłowego", w niektórych funkcjach przechodzi do poprawnego miejsca w kodzie źródłowym (odpowiedni plik .cpp), ale na innych próbuje otworzyć plik nagłówkowy (numer wiersza źródłowego jest poprawny, ale kod znajduje się w pliku .cpp, a nie w pliku .h). Wpływa to na podświetlanie kodu źródłowego - funkcje, które według VS są w .h, nie są podświetlone w .cpp. Nie mogę określić żadnej różnicy w funkcjach (ta sama widoczność, te same pliki nagłówkowe i źródłowe), z wyjątkiem może tego, do którego wątku są wywoływane. Każdy pomysł, dlaczego VS myśli, że jakiś kod jest w .h zamiast .cpp?Ochrona kodu Visual Studio 2015 Zły plik

+0

[mcve] może pomóc. Czy korzystasz z szablonów? – AndyG

+0

Zgadzam się. Brak funkcji szablonowych. – Jeff

+0

Czy projekt x64 lub x86? Pamiętam, że są problemy z x64. – AndyG

Odpowiedz

0

Wygląda na to, że nawet jeśli VS 2015 obsługuje funkcję C++ 11 non-static data member initializers (poprawnie się kompiluje), dławiki narzędzia rozszerzającego działają na tę funkcję. Oto MCVE. Używam aktualizacji VS 14.0.24720.00 1. Aby odtworzyć, skompiluj ten program, a następnie uzyskaj pokrycie kodu, uruchamiając go przy użyciu Generic Test. Jeśli zainicjowano x, narzędzie do wykrywania szuka kodu konstruktora w pliku .h. Jeśli usuniesz = 0, poprawnie identyfikuje definicję konstruktora tak, jak w .cpp. W moim kodzie produktu nie był to konstruktor, lecz pozornie losowe funkcje, które narzędzie pokrycia uważało za zdefiniowane w pliku .h. Poprawka, w moim przypadku, polegała na przeniesieniu inicjalizacji elementu danych na listę inicjalizacji konstruktora.

//.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; 
} 
Powiązane problemy