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
Odpowiedz
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;
}
- 1. Visual Studio 2015 Edytor ikon
- 2. Visual Studio 2015 nie odpowiada
- 3. Publikowanie z Visual Studio 2015
- 4. Visual Studio 2015 upaść przerwami
- 5. Visual Studio 2015 wysublimowany motyw
- 6. Brakujące emulatory Visual Studio 2015
- 7. Visual Studio 2015 .jar reference
- 8. Co to jest "Poprawki kodu Roslyn" w Visual Studio 2015?
- 9. Wykluczanie właściwości automatycznych z zakresu kodu w Visual Studio 2015
- 10. Visual Studio rzuca "zły" wyjątek czasu kompilacji
- 11. Upgrade Visual Studio 2013 rozwiązań do Visual Studio 2015
- 12. Minify PHP w Visual Studio 2015
- 13. Xamarin/Visual Studio 2015: konfiguracja niestandardowej konfiguracji
- 14. vbcs.cache/edb.log zablokowany przez Visual Studio 2015
- 15. Visual Studio 2015 Oddzielne poziomy zoomu
- 16. Visual Studio 2015/IISExpress zmiana portu SSL
- 17. Zastępowanie kolorów IntelliSense w Visual Studio 2015
- 18. Nie wygenerowano pdb w Visual Studio 2015
- 19. Visual Studio określić plik definicji
- 20. Ukryj komentarze XML w Visual Studio 2015
- 21. Visual Studio 2015 IIS Express 500 Error
- 22. Visual Studio 2015 dziwne skróty klawiaturowe
- 23. Nuget katastrofy w visual studio 2015
- 24. Visual Studio 2015: Utwórz pusty projekt
- 25. Raporty Crystal dla Visual Studio 2015
- 26. Pasek nawigacyjny programu Visual Studio 2015 znika
- 27. Zachowanie Assembly.GetTypes() zmienione w Visual Studio 2015
- 28. Dodawanie urządzeń do Ripple Visual Studio 2015
- 29. Włączanie RyuJIT w Visual Studio 2015 RC
- 30. Visual Studio 2015 Publikuj WebJobs Wydanie
[mcve] może pomóc. Czy korzystasz z szablonów? – AndyG
Zgadzam się. Brak funkcji szablonowych. – Jeff
Czy projekt x64 lub x86? Pamiętam, że są problemy z x64. – AndyG