Problembehandlung bei der Codeabdeckung
Das Codeabdeckungsanalysetool in Visual Studio erfasst Daten für systemeigene und verwaltete Assemblys (DLL- oder EXE-Dateien).In einigen Fällen wird das Fenster Codeabdeckungsergebnisse einen Fehler an, der "zu den leeren generierten Ergebnissen ähnelt: ...." Es gibt einige mögliche Gründe, die diesen möglicherweise könnte.Dieses Thema soll, um zu helfen, diese Probleme zu beheben.
Was finden Sie sollten
Wenn Sie einen Befehl Codeabdeckung analysieren auf dem Test auswählen und wenn der Build und die Tests erfolgreich ausgeführt, sollten Sie eine Ergebnisliste im Code-Abdeckungsfenster finden.Sie müssen möglicherweise die Elemente erweitern, um die Details anzuzeigen.
Weitere Informationen finden Sie unter Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung.
Mögliche Gründe für das finden keine Ergebnisse
Es wurden keine Tests ausgeführt
Analyse
Überprüfen Sie das Ausgabefenster.In der Dropdownliste Ausgabe anzeigen von wählen Sie Tests aus.Siehe, ob protokollierten Warnungen oder Fehler.Erklärung
Codeabdeckungsanalyse ist ausgeführt, während Tests ausgeführt werden.Sie enthält nur Assemblys, die in den Arbeitsspeicher wenn die Testausführung geladen werden.Wenn keine der Tests dann ausgeführt werden, gibt es keine, damit Codeabdeckung gemeldet.Lösung
im Test-Explorer wählen Sie Alle ausführen, um sicherzustellen, dass die Tests erfolgreich ausgeführt werden.Vor der Verwendung von Codeabdeckung analysieren beheben Sie alle Fehler.
Dateien .pdb (Symbol) sind nicht verfügbar
Analyse
Öffnen Sie den kompilierenszielordner (in der Regel debuggen bin \), und überprüfen Sie das für jede Assembly, es gibt eine PDB-Datei im gleichen Verzeichnis wie das DLL- oder EXE-Datei.Erklärung
Das Codeabdeckungsmodul erfordert, dass jede Assembly die zugeordnete PDB-Datei hat, die während des Testlaufs zugänglich ist.Wenn keine PDB-Datei für eine bestimmte Assembly gibt, wird sie nicht analysiert.Die PDB-Datei muss vom gleichen Build als die DLL- oder EXE-Dateien generiert werden.
Lösung
Stellen Sie sicher, dass die Buildeinstellungen die PDB-Datei generieren.Wenn die PDB-Dateien nicht aktualisiert werden, wenn das Projekt erstellt wird, öffnen Sie die Projekteigenschaften, wählen Sie die Seite Erstellen aus, wählen Sie Erweitert aus und überprüfen Sie Debuginformationen.Wenn die .pdb- und DLL- oder EXE-Dateien an verschiedenen Stellen sind, kopieren Sie die PDB-Datei in das Verzeichnis.Es ist auch möglich, Codeabdeckungsmodul zu konfigurieren, um für PDB-Dateien in einem anderen Speicherort zu suchen.Weitere Informationen finden Sie unter Anpassen der Codeabdeckungsanalyse.
Verwenden einer instrumentierten Binärdatei oder optimierten
Analyse
Bestimmen Sie, wenn die Binärdatei ein Formular der erweiterten Optimierung wie profilgesteuerte Optimierung unterzogen verfügt, oder wurde durch eine Profilerstellungstool wie vsinstr.exe oder vsperfmon.exe instrumentiert wurde.Erklärung
Wenn eine Assembly bereits für ein anderes Profilerstellungstool instrumentiert wurde oder optimiert wurde, wird die Assembly von der Codeabdeckungsanalyse weggelassen.Codeabdeckungsanalyse kann nicht auf solchen Assemblys ausgeführt werden.
Lösung
Aktivieren Sie Optimierung aus und verwenden Sie einen neuen Build.
Code wird nicht (.NET) oder systemeigenen (C++-) Code verwaltet
Analyse
Stellen Sie sicher, dass Sie verschiedene Tests in verwaltetem oder C++-Code ausführen.Erklärung
Codeabdeckungsanalyse in Visual Studio ist nur für verwalteten und systemeigenen (C++-) Code verfügbar.Wenn Sie mit Tools von Drittanbietern arbeiten, können möglicherweise einige oder alle Code für eine andere Plattform aus.Lösung
Kein verfügbar.
Assembly ist von NGen eingerichtet
Analyse
Stellen Sie sicher, dass die Assembly nicht im Cache für systemeigene Abbilder geladen wird.Erklärung
Aus Leistungsgründen werden Assemblys systemeigener Abbilder nicht analysiert.Weitere Informationen finden Sie unter Ngen.exe (Native Image Generator).Lösung
Verwenden Sie eine MSIL-Version der Assembly.Verarbeiten Sie sie nicht mit NGen.
Datei der benutzerdefinierten .runsettings mit ungültiger Syntax
Analyse
Wenn Sie eine benutzerdefinierte .runsettings verwenden, kann sie einen Syntaxfehler.Dies führt keine Codeabdeckung, die je ausgeführt wird.Über das Codeabdeckungsfenster öffnet sich nicht am Ende des Testlaufs, oder es werden alte Ergebnisse an.
Erklärung
Sie können die Komponententests mit einer Datei der benutzerdefinierten .runsettings ausführen, um Codeabdeckungsoptionen zu konfigurieren.Die Optionen ermöglichen es, Dateien einzuschließen oder auszuschließen.Weitere Informationen finden Sie unter Anpassen der Codeabdeckungsanalyse.Lösung
Es gibt zwei mögliche Typen Fehler:
XML-Fehler
Öffnen Sie die .runsettings-Datei im Visual Studio-XML-Editor.Suchen Sie nach Fehleranzeigen.
Fehler des regulären Ausdrucks
Jede Zeichenfolge in der Datei ist ein regulärer Ausdruck.Überprüfen Sie jedes für Fehler, und suchen Sie insbesondere:
Nicht übereinstimmende Klammern (...) oder Klammern ohne Escapezeichen (\...\).Wenn Sie eine Klammer in der Suchzeichenfolge möchten, müssen Sie es mit einem Escapezeichen versehen.Beispielsweise wird eine übereinstimmen: .*MyFunction\(double\)
Sternchen Plus- oder am Anfang eines Ausdrucks.Um eine Zeichenfolge zu finden, verwenden Sie einen Punkt, der von einem Sternchen folgen: .*
Datei der benutzerdefinierten .runsettings mit falschen Ausschlüssen
Analyse
Wenn Sie eine benutzerdefinierte .runsettings verwenden, stellen Sie sicher, dass sie die Assembly enthält.Erklärung
Sie können die Komponententests mit einer Datei der benutzerdefinierten .runsettings ausführen, um Codeabdeckungsoptionen zu konfigurieren.Die Optionen ermöglichen es, Dateien einzuschließen oder auszuschließen.Weitere Informationen finden Sie unter Anpassen der Codeabdeckungsanalyse.Lösung
Entfernen Sie alle Include Knoten aus der .runsettings-Datei, und entfernen Sie dann alle Exclude Knoten.Wenn dieses Problem behoben, platzieren Sie sie hinter in Phasen ein.Stellen Sie sicher, dass der DataCollectors-Knoten Codeabdeckung angibt.Vergleichen Sie ihn mit dem Beispiel in Anpassen der Codeabdeckungsanalyse.
Im Code wird immer angezeigt, wie nicht abgedeckt
Initialisierungscode im systemeigene DLL wird vor Instrumentation ausgeführt
Analyse
In statisch verknüpftem systemeigenem Code wird der Teil der Initialisierungsfunktion DllMain und der Code, den sie aufruft, manchmal angezeigt, wie nicht abgedeckt, wenn der Code ausgeführt wurde.Erklärung
Das Codeabdeckungstool funktioniert, indem Instrumentation in eine Assembly einfügt, bevor die Anwendung gestartet wird.In einer Assembly geladen, bevor dieses Mal, der Initialisierungscode in DllMain ausgeführt wird, sobald Laden der Assembly und vor der Anwendung ausgeführt wird.Dieser Code wird als nicht abgedeckt zu sein.In der Regel gilt dies auf statisch geladene Assemblys.
Lösung
Keine.
Siehe auch
Weitere Ressourcen
Bestimmen des Umfangs des zu testenden Codes mithilfe von Codeabdeckung