Pokrycie kodu — wyszukiwanie błędów
Narzędzie analizy pokrycia kodu w programie Visual Studio zbiera dane dotyczące zestawów macierzystych i zarządzanych (pliki dll i exe).Jednak, w niektórych przypadkach, okno Wyniki pokrycia kodu, wyświetla błąd podobny do "Wygenerowano puste wyniki: …" Istnieje kilka możliwych przyczyn tego zdarzenia.Ten temat jest przeznaczony do dostarczenia pomocy w rozwiązaniu tych problemów.
Co powinno się wyświetlić
Jeśli wybierzesz polecenie Analizuj pokrycie kodu w menu Test i jeżeli kompilacja oraz testy zostaną wykonane pomyślnie, powinna wyświetlić się lista wyników, w oknie Pokrycie kodu.Aby wyświetlić szczegółowe informacje należy rozwinąć elementy.
Aby uzyskać więcej informacji, zobacz Za pomocą Code Coverage, aby określić, jak dużo kodu jest badany.
Możliwe przyczyny wyświetlania braku wyników
Nie zostały wykonane żadne testy
Analiza
Sprawdź w oknie danych wyjściowych.Z listy rozwijalnej Pokaż dane wyjściowe z wybierz Testy.Sprawdź, czy są zarejestrowane błędy lub ostrzeżenia.Wyjaśnienie
Analiza pokrycia kodu odbywa się podczas wykonywania testów.Zawiera tylko te zestawy, które są ładowane do pamięci podczas wykonywania testów.Jeśli żadne testy nie są wykonywane, narzędzie pokrycia kodu nie ma nic do zgłoszenia.Rozwiązanie
W Eksploratorze testu wybierz Uruchom wszystkie aby sprawdzić, czy testy zostaną wykonane pomyślnie.Rozwiąż wszelkie błędy przed użyciem narzędzia Analiza pokrycia kodu.
pliki pdb (symbol) są niedostępne
Analiza
Otwórz docelowy folder kompilacji (zazwyczaj bin\debug) i sprawdź, czy dla każdego zestawu istnieje plik pdb, w tym samym katalogu co plik dll lub exe.Wyjaśnienie
Silnik pokrycia kodu wymaga tego, że każdy zestaw ma swój skojarzony plik pdb dostępny podczas przebiegu testowego.Jeśli określony zestaw nie ma pliku pdb, nie zostanie on przeanalizowany.Plik pdb musi zostać wygenerowany z tej samej kompilacji co pliki dll i exe.
Rozwiązanie
Upewnij się, że ustawienia kompilacji generują plik pdb.Jeśli pliki pdb nie są aktualizowane gdy projekt jest kompilowany, należy otworzyć właściwości projektu, zaznaczyć stronę Kompilacja wybrać Zaawansowane oraz sprawdzić Debug Info.Jeśli pliki pdb i dll lub exe znajdują się w różnych miejscach, należy skopiować plik pdb do tego samego katalogu.Można również skonfigurować silnik pokrycia kodu, aby wyszukiwał pliki pdb w innej lokalizacji.Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.
Za pomocą instrumentowanego lub zoptymalizowanego pliku binarnego
Analiza
Należy określić, czy plik binarny przeszedł przez dowolną formę procesu zaawansowanej optymalizacji, takiego jak Profilowana optymalizacja, lub czy został instrumentowany przez narzędzia profilowania, takie jak vsinstr.exe lub vsperfmon.exe.Wyjaśnienie
Jeśli zestaw został już instrumentowany lub zoptymalizowany przez inne narzędzie do profilowania, zestaw jest pominięty z analizy pokrycia kodu.Nie można wykonać analizy pokrycia kodu na takich zestawach.
Rozwiązanie
Wyłącz optymalizację i użyj nowej kompilacji.
Kod nie jest zarządzany (.NET) lub nie jest kodem macierzystym (C++)
Analiza
Sprawdź, czy niektóre testy są uruchomione na kodzie zarządzanym lub kodzie C++.Wyjaśnienie
Analiza pokrycia kodu w programie Visual Studio jest dostępna tylko dla zarządzanego i macierzystego kodu (C++).Jeżeli pracujesz na narzędziach innych firm, część kodu lub cały kod może być wykonywany na innej platformie.Rozwiązanie
Brak dostępnych.
Zestaw został zainstalowany przez NGen
Analiza
Upewnij się, że zestaw nie jest ładowany z pamięci podręcznej obrazu macierzystego.Wyjaśnienie
Ze względu na wydajność, zestawy obrazu macierzystego nie są analizowane.Aby uzyskać więcej informacji, zobacz Ngen.exe (Native Image Generator).Rozwiązanie
Należy użyć wersji MSIL zestawu.Nie przetwarzaj go z NGen.
Niestandardowy plik runsettings o złej składni.
Analiza
Jeśli używasz pliku niestandardowego runsettings, może zawierać błąd składni.Wynikiem tego jest całkowity brak uruchomienia pokrycia kodu.Okno pokrycia kodu nie zostanie otwarte po zakończeniu przebiegu testowego lub wyświetli stare wyniki.
Wyjaśnienie
Można uruchomić testy jednostkowe z pliku niestandardowego runsettings, aby skonfigurować opcje pokrycia kodu.Opcje umożliwiają uwzględnianie lub wykluczanie plików.Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu.Rozwiązanie
Istnieją dwa typy możliwych błędów:
Błąd XML
Otwórz plik runsettings w edytorze XML programu Visual Studio.Poszukaj oznak błędów.
Błąd w wyrażeniu regularnym
Każdy ciąg znaków w pliku, jest wyrażeniem regularnym.Przejrzyj każdy z nich w poszukiwaniu błędów, a w szczególności zwróć uwagę na:
Niedopasowane nawiasy (...) lub nawiasy bez poprzedzającego znaku ucieczki \(...\).Jeśli chcesz dopasować nawiasy w ciągu wyszukiwania, musisz dodać przed nimi znak ucieczki.Na przykład, aby dopasować funkcję, należy użyć: .*MyFunction\(double\)
Gwiazdka lub plus na początku wyrażenia.Aby dopasować dowolny ciąg znaków, należy użyć kropkę poprzedzającą gwiazdkę: .*
Niestandardowy plik runsettings z niepoprawnymi wykluczeniami
Analiza
Korzystając z pliku niestandardowego runsettings upewnij się, że zawiera on twój zestaw.Wyjaśnienie
Można uruchomić testy jednostkowe z pliku niestandardowego runsettings, aby skonfigurować opcje pokrycia kodu.Opcje umożliwiają uwzględnianie 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 węzły Exclude.Jeśli to rozwiąże problem, umieść je z powrotem w etapach.Upewnij się, że węzeł DataCollectors określa Pokrycie kodu.Porównaj je z przykładem w Dostosowywanie analizy pokrycia kodu.
Niektóry kod jest zawsze wyświetlany jako niepokryty
Kod inicjujący w macierzystych bibliotekach DLL jest wykonywany przed instrumentacją
Analiza
W statycznie połączonym kodzie macierzystym, część funkcji inicjowania DllMain i kod, który wywołuje, jest czasami przedstawiany jako kod niepokryty, pomimo tego, że kod został wykonany.Wyjaśnienie
Narzędzie pokrycia kodu działa poprzez wstawienie instrumentacji do zestawu tuż przed uruchomieniem aplikacji.W każdym zestawie załadowanym wcześniej, kod inicjowania w DllMain wykonuje się, jak tylko zestaw zostanie załadowany i przed uruchomieniem aplikacji.Ten kod zostanie wyświetlony jako niepokryty.Zwykle dotyczy to statycznie załadowanych zestawów.
Rozwiązanie
Brak.
Zobacz też
Inne zasoby
Za pomocą Code Coverage, aby określić, jak dużo kodu jest badany