Udostępnij za pośrednictwem


Rozwiązywanie problemów z pokryciem kodu

Dotyczy: Visual Studio

Narzędzie do analizy pokrycia kodu w programie Visual Studio zbiera dane dla zestawów natywnych i zarządzanych ( plików.dll lub .exe ). Jednak w niektórych przypadkach w oknie Wyniki pokrycia kodu jest wyświetlany błąd podobny do "Wygenerowane puste wyniki: ....". Ten artykuł ułatwia rozwiązywanie problemów z różnymi przyczynami występowania pustych wyników.

Co powinieneś zobaczyć?

Jeśli wybierzesz polecenie Analizuj pokrycie kodu w menu Test , a kompilacja i testy zostaną pomyślnie uruchomione, w oknie Pokrycie kodu powinna zostać wyświetlona lista wyników. Może być konieczne rozwinięcie elementów w celu wyświetlenia szczegółów.

Zrzut ekranu przedstawiający wyniki pokrycia kodu kolorowaniem.

Aby uzyskać więcej informacji, zobacz Używanie pokrycia kodu w celu określenia ilości testowanego kodu.

Możliwe przyczyny braku wyników lub starych wyników

Nie używasz właściwej wersji programu Visual Studio

Potrzebujesz Visual Studio Enterprise.

Nie wykonano żadnych testów

Analizę

Sprawdź okno danych wyjściowych. Z listy rozwijanej Pokaż dane wyjściowe wybierz pozycję Testy. Sprawdź, czy są rejestrowane jakiekolwiek ostrzeżenia lub błędy.

Objaśnienie

Analiza pokrycia kodu jest wykonywana podczas wykonywania testów. Obejmuje on tylko zestawy ładowane do pamięci po uruchomieniu testów. Jeśli żaden z testów nie jest wykonywany, nie ma żadnych elementów do raportowania w zakresie pokrycia kodu.

Rozwiązanie

W Eksploratorze testów wybierz pozycję Uruchom wszystko , aby sprawdzić, czy testy zostały pomyślnie uruchomione. Rozwiąż wszelkie błędy przed użyciem funkcji Analizuj pokrycie kodu.

Patrzysz na poprzedni wynik

Podczas modyfikowania i ponownego uruchamiania testów nadal może być widoczny poprzedni wynik pokrycia kodu, w tym kolorowanie kodu z tego starego przebiegu. Wykonaj następujące kroki, aby rozwiązać ten problem:

  1. Uruchom polecenie Analizuj pokrycie kodu.
  2. Upewnij się, że wybrano najnowszy zestaw wyników w oknie Wyniki pokrycia kodu .

Pliki pdb (symbol) są niedostępne

Analizę

Otwórz folder docelowy kompilacji (zazwyczaj bin\debug) i sprawdź, czy dla każdego zestawu istnieje plik pdb w tym samym katalogu co plik .dll lub .exe .

Objaśnienie

Aparat pokrycia kodu wymaga, aby każdy zestaw miał skojarzony plik pdb dostępny podczas przebiegu testu. Jeśli nie ma pliku pdb dla określonego zestawu, zestaw nie jest analizowany.

Plik pdb musi zostać wygenerowany z tej samej kompilacji co pliki .dll lub .exe .

Rozwiązanie

Upewnij się, że ustawienia kompilacji generują plik pdb .

  • Jeśli pliki pdb nie są aktualizowane podczas kompilowania projektu, otwórz właściwości projektu, wybierz stronę Kompilacja , wybierz pozycję Zaawansowane i sprawdź informacje debugowania.

  • W programie Visual Studio 2022 i nowszych wersjach dla projektów języka C# przeznaczonych dla platformy .NET Core lub .NET 5 lub nowszych otwórz właściwości projektu, wybierz kartę Kompilacja , wybierz pozycję Ogólne i sprawdź symbole debugowania.

  • W przypadku projektów C++ upewnij się, że wygenerowane pliki pdb mają pełne informacje debugowania. Otwórz właściwości projektu i sprawdź, czy debugowanie konsolidatora>Generuj>informacje debugowania ma wartość Generuj informacje debugowania zoptymalizowane pod kątem udostępniania i publikowania (/DEBUG:FULL).

Jeśli pliki pdb i .dll lub .exe znajdują się w różnych miejscach, skopiuj plik pdb do tego samego katalogu. Istnieje również możliwość skonfigurowania aparatu pokrycia kodu w celu wyszukiwania plików pdb w innej lokalizacji. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Używany jest instrumentowany lub zoptymalizowany plik binarny

Analizę

Ustal, czy dane binarne zostały poddane jakiejkolwiek formie zaawansowanej optymalizacji, takiej jak optymalizacja z przewodnikiem po profilu, czy też zostały instrumentowane za pomocą narzędzia profilowania, takiego jak vsinstr.exe lub vsperfmon.exe.

Objaśnienie

Jeśli zestaw został już instrumentowany lub zoptymalizowany przez inne narzędzie profilowania, zestaw zostanie pominięty w analizie pokrycia kodu. Nie można przeprowadzić analizy pokrycia kodu na takich zestawach.

Rozwiązanie

Wyłącz optymalizację i użyj nowej kompilacji.

Kod nie jest zarządzany (.NET) ani kod natywny (C++)

Analizę

Określ, czy uruchamiasz testy kodu zarządzanego lub C++.

Objaśnienie

Analiza pokrycia kodu w programie Visual Studio jest dostępna tylko w przypadku kodu zarządzanego i natywnego (C++). Jeśli pracujesz z narzędziami innych firm, niektóre lub wszystkie kody mogą być wykonywane na innej platformie.

Rozwiązanie

Brak dostępnych.

Nazwa projektu zawiera ciąg "DataCollector"

Projekty korzystające z narzędzia DataCollector w nazwie projektu nie będą identyfikowane przez pokrycie kodu.

Zestaw został zainstalowany przez narzędzie NGen

Analizę

Określ, czy zestaw jest ładowany z pamięci podręcznej obrazu natywnego.

Objaśnienie

Ze względu na wydajność zestawy obrazów natywnych nie są analizowane. Aby uzyskać więcej informacji, zobacz Ngen.exe (Generator obrazów natywnych).

Rozwiązanie

Użyj wersji MSIL zestawu. Nie przetwarzaj go za pomocą narzędzia NGen.

Niestandardowy plik .runsettings ma problemy ze składnią

Analizę

Jeśli używasz niestandardowego pliku .runsettings , może on zawierać błąd składni. Pokrycie kodu nie jest uruchamiane, a okno pokrycia kodu nie jest otwierane na końcu przebiegu testu lub pokazuje stare wyniki.

Objaśnienie

Możesz uruchomić testy jednostkowe przy użyciu niestandardowego pliku .runsettings , aby skonfigurować opcje pokrycia kodu. Opcje umożliwiają dołączanie lub wykluczanie plików. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Rozwiązanie

Istnieją dwa możliwe typy błędów:

  • Błąd XML

    Otwórz plik .runsettings w edytorze XML programu Visual Studio. Poszukaj wskazówek dotyczących błędów.

  • Błąd wyrażenia regularnego

    Każdy ciąg w pliku jest wyrażeniem regularnym. Przejrzyj każdy z nich pod kątem błędów, a w szczególności wyszukaj:

    • Niedopasowane nawiasy (...) lub nawiasy unescaped \(...\). Jeśli chcesz dopasować nawias w ciągu wyszukiwania, musisz go uciec. Na przykład, aby dopasować funkcję, użyj: .*MyFunction\(double\)
    • Gwiazdka lub plus na początku wyrażenia. Aby dopasować dowolny ciąg znaków, użyj kropki, po której następuje gwiazdka: .*

Niestandardowy plik .runsettings z nieprawidłowymi wykluczeniami

Analizę

Jeśli używasz niestandardowego pliku .runsettings , upewnij się, że zawiera on zestaw.

Objaśnienie

Możesz uruchomić testy jednostkowe przy użyciu niestandardowego pliku .runsettings , aby skonfigurować opcje pokrycia kodu. Opcje umożliwiają dołączanie lub wykluczanie plików. Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.

Rozwiązanie

Usuń wszystkie węzły Include z pliku .runsettings , a następnie usuń wszystkie Exclude węzły. Jeśli to rozwiązło problem, umieść go ponownie w etapach.

Upewnij się, że węzeł DataCollectors określa pokrycie kodu. Porównaj go z przykładem w artykule Dostosowywanie analizy pokrycia kodu.

Niektóre kody są zawsze wyświetlane jako niezakryte

Kod inicjowania w natywnych bibliotekach DLL jest wykonywany przed instrumentacją

Analizę

W statycznie połączonym kodzie natywnym część funkcji inicjowania DllMain i kod, który wywołuje, są czasami wyświetlane jako niezakryte, nawet jeśli kod został wykonany.

Objaśnienie

Narzędzie pokrycia kodu działa przez wstawienie instrumentacji do zestawu tuż przed rozpoczęciem działania aplikacji. W każdym zestawie załadowanym wcześniej kod inicjowania w narzędziu DllMain jest wykonywany natychmiast po załadowaniu zestawu i przed uruchomieniem aplikacji. Ten kod wydaje się nie być omówiony, co zwykle dotyczy statycznie załadowanych zestawów.

Rozwiązanie

Brak.

Informacje