Dela via


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 för 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äckningpå 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.

Skärmbild som visar resultat av kodtäckning med färgläggning.

Mer information finns i Använda kodtäckning för att avgöra hur mycket kod som testas.

Möjliga orsaker till att inga resultat visas 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äckningsanalys görs medan tester 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 Test Explorer 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 resultat för kodtäckning fortfarande visas, inklusive kodfärgningen från den gamla körningen. Följ dessa steg för att lösa problemet:

  1. Kör Analysera kodtäckning.
  2. Kontrollera att du har valt den senaste resultatuppsättningen i fönstret Resultat för kodtäckning .

.pdb-filer (symbolfiler) är inte tillgängliga

Analys

Öppna målmappen för kompilering (vanligtvis bin\debug) och kontrollera att det för varje sammansättning finns en .pdb-fil i samma katalog som .dll - eller .exe-filen .

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 inspekterar Felsökningsinformation.

  • I Visual Studio 2022 och senare versioner öppnar du projektegenskaperna för C#-projekt som riktar sig mot .NET Core eller .NET 5+, 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 filerna .pdb och .dll eller .exe 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 analys av kodtäckning.

En instrumenterad eller optimerad binärfil används

Analys

Kontrollera om binärfilen har genomgått någon form av avancerad optimering, till exempel guidad optimering av profiler, 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. Kodtäckningsanalys kan inte utföras på sådana sammansättningar.

Lösning

Stäng av optimeringen och använd en ny version.

Koden är inte hanterad (.NET) eller intern (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 eller all kod köras på en annan plattform.

Lösning

Ingen tillgänglig.

Projektnamnet innehåller "DataCollector"

Projekt som använder DataCollector i projektnamnet identifieras inte av kodtäckning.

Sammansättningen 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 iNgen.exe (Native Image Generator).

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 analys av kodtäckning.

Lösning

Det finns två möjliga typer av fel:

  • XML-fel

    Öppna .runsettings-filen i Visual Studio XML-redigeraren. Leta efter fel indikationer.

  • Fel med reguljära 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 parenteser som inte är kapslade \(...\). Om du vill matcha en parentes i söksträngen måste du undvika den. Om du till exempel vill matcha en funktion använder du: .*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: .*

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 analys av kodtäckning.

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 det 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

Ingen.

Referenser