Felsöka kodtäckning
Gäller för: Visual Studio
Verktyget för kodtäckningsanalys i Visual Studio samlar in data för interna och hanterade sammansättningar (.dll eller .exe filer). I vissa fall visar dock fönstret Resultat av kodtäckning ett fel som liknar "Tomma resultat genererade: ...". Den här artikeln hjälper dig att felsöka och lösa de olika orsakerna till att du kan stöta på tomma resultat.
Vad ska du se?
Om du väljer kommandot Analysera kodtäckning på testmenyn och om bygget och testerna körs korrekt bör du se en lista med resultat i fönstret Kodtäckning. Du kan behöva expandera objekten för att se informationen.
Mer information finns i Använda kodtäckning för att avgöra hur mycket kod som testas.
Möjliga orsaker till att inte se några resultat eller gamla resultat
Du använder inte rätt version av Visual Studio
Du behöver Visual Studio Enterprise.
Inga tester utfördes
Analys
Kontrollera utdatafönstret. I listrutan Visa utdata från väljer du Tester. Se om det finns några varningar eller fel loggade.
Förklaring
Kodtäckningsanalysen görs medan testerna körs. Den innehåller bara sammansättningar som läses in i minnet när testerna körs. Om inget av testerna körs finns det inget för kodtäckning att rapportera.
Lösning
I TestUtforskaren väljer du Kör alla för att kontrollera att testerna har körts. Åtgärda eventuella fel innan du använder Analysera kodtäckning.
Du tittar på ett tidigare resultat
När du ändrar och kör testerna igen kan ett tidigare kodtäckningsresultat fortfarande visas, inklusive kodfärgningen från den gamla körningen. Följ dessa steg för att lösa problemet:
- Kör Analysera kodtäckning.
- Kontrollera att du har valt den senaste resultatuppsättningen i fönstret Kodtäckningsresultat .
.pdb-filer (symbol) är inte tillgängliga
Analys
Öppna kompileringsmålmappen (vanligtvis bin\debug) och kontrollera att det för varje sammansättning finns en .pdb-fil i samma katalog som filen .dll eller .exe .
Förklaring
Kodtäckningsmotorn kräver att varje sammansättning har sin associerade .pdb-fil tillgänglig under testkörningen. Om det inte finns någon .pdb-fil för en viss sammansättning analyseras inte sammansättningen.
.pdb-filen måste genereras från samma version som .dll- eller .exe-filerna.
Lösning
Se till att dina bygginställningar genererar .pdb-filen .
Om .pdb-filerna inte uppdateras när projektet skapas öppnar du projektegenskaperna, väljer sidan Skapa, väljer Avancerat och kontrollerar Felsökningsinformation.
I Visual Studio 2022 och senare versioner öppnar du projektegenskaperna för .NET Core eller .NET 5+ för C#-projekt, väljer fliken Skapa , väljer Allmänt och inspekterar felsökningssymboler.
För C++-projekt kontrollerar du att de genererade .pdb-filerna har fullständig felsökningsinformation. Öppna projektegenskaperna och kontrollera att Länkfelsökning>>generera felsökningsinformation är inställt på Generera felsökningsinformation som är optimerad för delning och publicering (/DEBUG:FULL).
Om .pdb- och .dll- eller .exe-filerna finns på olika platser kopierar du .pdb-filen till samma katalog. Det går också att konfigurera kodtäckningsmotorn för att söka efter .pdb-filer på en annan plats. Mer information finns i Anpassa kodtäckningsanalys.
En instrumenterad eller optimerad binärfil används
Analys
Kontrollera om binärfilen har genomgått någon form av avancerad optimering, till exempel profilstyrd optimering, eller har instrumenterats av ett profileringsverktyg som vsinstr.exe eller vsperfmon.exe.
Förklaring
Om en sammansättning redan har instrumenterats eller optimerats av ett annat profileringsverktyg utelämnas sammansättningen från kodtäckningsanalysen. Det går inte att utföra kodtäckningsanalyser på sådana sammansättningar.
Lösning
Stäng av optimeringen och använd en ny version.
Koden är inte hanterad (.NET) eller inbyggd (C++)-kod
Analys
Kontrollera om du kör några tester på hanterad kod eller C++-kod.
Förklaring
Kodtäckningsanalys i Visual Studio är endast tillgängligt för hanterad och intern kod (C++). Om du arbetar med verktyg från tredje part kan en del av eller hela koden köras på en annan plattform.
Lösning
Ingen är tillgänglig.
Projektnamnet innehåller "DataCollector"
Projekt som använder DataCollector i projektnamnet identifieras inte med kodtäckning.
Sammansättning har installerats av NGen
Analys
Kontrollera om sammansättningen läses in från den interna avbildningscacheminnet.
Förklaring
Av prestandaskäl analyseras inte interna bildsammansättningar. Mer information finns i Ngen.exe (intern avbildningsgenerator).
Lösning
Använd en MSIL-version av sammansättningen. Bearbeta det inte med NGen.
Den anpassade .runsettings-filen har syntaxproblem
Analys
Om du använder en anpassad .runsettings-fil kan den innehålla ett syntaxfel. Kodtäckningen körs inte och antingen öppnas inte kodtäckningsfönstret i slutet av testkörningen, eller så visas gamla resultat.
Förklaring
Du kan köra enhetstesterna med en anpassad .runsettings-fil för att konfigurera alternativ för kodtäckning. Med alternativen kan du inkludera eller exkludera filer. Mer information finns i Anpassa kodtäckningsanalys.
Lösning
Det finns två möjliga typer av fel:
XML-fel
Öppna .runsettings-filen i Visual Studio XML-redigeraren. Leta efter felinformation.
Fel med reguljärt uttryck
Varje sträng i filen är ett reguljärt uttryck. Granska var och en efter fel och leta särskilt efter:
- Parenteser som inte matchar (...) eller ej kapslade parenteser \(...\). Om du vill matcha en parentes i söksträngen måste du undvika den. Om du till exempel vill matcha en funktionsanvändning:
.*MyFunction\(double\)
- Asterisk eller plus i början av ett uttryck. Om du vill matcha valfri teckensträng använder du en punkt följt av en asterisk:
.*
- Parenteser som inte matchar (...) eller ej kapslade parenteser \(...\). Om du vill matcha en parentes i söksträngen måste du undvika den. Om du till exempel vill matcha en funktionsanvändning:
Anpassad .runsettings-fil med felaktiga undantag
Analys
Om du använder en anpassad .runsettings-fil kontrollerar du att den innehåller din sammansättning.
Förklaring
Du kan köra enhetstesterna med en anpassad .runsettings-fil för att konfigurera alternativ för kodtäckning. Med alternativen kan du inkludera eller exkludera filer. Mer information finns i Anpassa kodtäckningsanalys.
Lösning
Ta bort alla Include
noder från .runsettings-filen och ta sedan bort alla Exclude
noder. Om det löser problemet kan du sätta tillbaka dem i faser.
Kontrollera att noden DataCollectors anger kodtäckning. Jämför med exemplet i Anpassa kodtäckningsanalys.
En del kod visas alltid som inte täckt
Initieringskod i interna DLL:er körs före instrumentation
Analys
I statiskt länkad intern kod visas en del av initieringsfunktionen DllMain och kod som den anropar ibland som inte omfattas, även om koden har körts.
Förklaring
Kodtäckningsverktyget fungerar genom att infoga instrumentation i en sammansättning precis innan programmet börjar köras. I alla sammansättningar som läses in i förväg körs initieringskoden i DllMain så snart sammansättningen läses in och innan programmet körs. Koden verkar inte omfattas, vilket vanligtvis gäller statiskt inlästa sammansättningar.
Lösning
Inga.