Risoluzione dei problemi di code coverage
Lo strumento di analisi della copertura del codice in Visual Studio raccoglie dati per assembly nativo e gestito (file .dll o .exe).Tuttavia, in alcuni casi, la finestra dei risultati della copertura del codice visualizza un errore simile a "Generati risultati vuoti: ...." Esistono vari motivi possibili per cui questo può verificarsi.Questo argomento è progettato per aiutare a risolvere quei problemi.
Cosa si dovrebbe vedere
Se si sceglie un comando Analizza copertura codice dal menu Test e se la compilazione e i test vengono eseguiti correttamente, allora sarà visualizzato un elenco di risultati nella finestra di copertura del codice.Potrebbe essere necessario espandere gli elementi per visualizzare il dettaglio.
Per ulteriori informazioni, vedere Utilizzo di code coverage per determinare la quantità di codice testato.
Le possibili cause per non visualizzare risultati
Nessun test è stato eseguito
Analisi
Verificare la finestra di output.Nell'elenco a discesa Mostra output da, scegliere Test.Verificare se sono presenti avvisi o errori registrati.Descrizione
L'analisi di copertura del codice viene effettuata mentre i test sono in esecuzione.Include solo gli assembly caricati in memoria quando i test vengono eseguiti.Se nessuno dei test viene eseguito allora la copertura del codice non ha nulla da riportare.Risoluzione
Nell'Explorer di Test, scegliere Esegui tutto per verificare che i test vengono eseguiti correttamente.Correggere tutti gli errori prima di utilizzare Analizza copertura del codice.
i file .pdb (simbolo) non sono disponibili
Analisi
Aprire la cartella di destinazione della compilazione (in genere bin\debug) e verificare che per ogni assembly, esista un file .pdb nella stessa directory del file .dll o .exe.Descrizione
Nel motore di copertura del codice è necessario che ogni assembly abbia il suo file .pdb associato accessibile durante l'esecuzione del test.Se non esiste alcun file .pdb per un particolare assembly, esso non verrà analizzato.Il file .pdb deve essere generato dalla stessa compilazione del file .dll o file .exe.
Risoluzione
Verificare che le impostazioni di compilazione generarino il file .pdb.Se i file .pdb non vengono aggiornati quando il progetto viene compilato, aprire le proprietà del progetto, selezionare la pagina Compila, scegliere Avanzate e controllare Informazioni di debug.Se i file .pdb e .dll o .exe sono in posizioni diverse, copiare il file .pdb nella stessa directory.È inoltre possibile configurare il motore di copertura del codice per cercare i file .pdb in un'altra posizione.Per ulteriori informazioni, vedere Personalizzazione dell'analisi code coverage.
Utilizzando un binario instrumentato o ottimizzato
Analisi
Determinare se il binario ha subito qualche forma di ottimizzazione avanzata come una "Profile Guided Optimization" PGO, o è stato instrumentato da uno strumento di profilatura come vsinstr.exe o vsperfmon.exe.Descrizione
Se l'assembly è già stato instrumentato o ottimizzato da un altro strumento di profilatura, l'assembly viene omesso dall'analisi di copertura del codice.L'analisi di copertura del codice non può essere eseguita su tali assembly.
Risoluzione
Spegnere l'ottimizzazione e usare una nuova compilazione.
Il codice non viene gestito (.NET) o codice nativo (C++)
Analisi
Verificare che vengano eseguiti alcuni test su codice gestito o C++.Descrizione
L'analisi di copertura del codice in Visual Studio è disponibile solo nel codice gestito e nativo (C++).Se si utilizzano gli strumenti di terze parti, alcuni tratti o tutto il codice può essere eseguito su una piattaforma diversa.Risoluzione
Non disponibile.
L'assembly è stato installato da NGen
Analisi
Verificare che l'assembly non venga caricato dalla cache delle immagini native.Descrizione
Per motivi di prestazioni, gli assembly di immagini native non vengono analizzate.Per ulteriori informazioni, vedere Ngen.exe (generatore di immagini native).Risoluzione
Utilizzare una versione MSIL dell'assembly.Non elaborarlo con NGen.
File personalizzato .runsettings con sintassi non valida
Analisi
Se si utilizza un file personalizzato .runsettings, potrebbe contenere un errore di sintassi.Ciò comporta che nessuna copertura del codice verrà eseguita.Anche la finestra di copertura del codice non viene visualizzata alla fine dell'esecuzione del test oppure vengono visualizzati i vecchi risultati.
Descrizione
È possibile eseguire i test delle unità con un file personalizzato .runsettings per configurare le opzioni di copertura del codice.Le opzioni consentono di includere o escludere i file.Per ulteriori informazioni, vedere Personalizzazione dell'analisi code coverage.Risoluzione
Esistono due possibili tipi di errori:
errore XML
Aprire il file .runsettings nell'editor XML di Visual Studio.Individuare le indicazioni degli errori.
Errore di espressione regolare
Ogni stringa nel file è un'espressione regolare.Rivedere ognuno in cerca di errori, in particolare individuare:
Parentesi non corrispondenti (...) o parentesi senza codice di escape \(…\).Se si desidera che una parentesi corrisponda nella stringa di ricerca, è necessario utilizzare caratteri di escape.Ad esempio, per cercare una funzione usare: .*MyFunction\(double\)
Asterisco o più all'inizio di un'espressione.Per cercare una stringa di caratteri, utilizzare un punto seguito da un asterisco: .*
File personalizzato .runsettings con esclusione non corretta
Analisi
Se si utilizza un file personalizzato .runsettings, assicurarsi di includerlo nell'assembly.Descrizione
È possibile eseguire i test delle unità con un file personalizzato .runsettings per configurare le opzioni di copertura del codice.Le opzioni consentono di includere o escludere i file.Per ulteriori informazioni, vedere Personalizzazione dell'analisi code coverage.Risoluzione
Rimuovere tutti i nodi Include dal file .runsettings quindi rimuovere tutti i nodi Exclude.Se questo risolve il problema, rimettili in più fasi.Assicurarsi che il nodo di DataCollectors specifichi la copertura del codice.Confrontarlo con l'esempio in Personalizzazione dell'analisi code coverage.
Del codice verrà sempre visualizzato come non copribile
Il codice di inizializzazione nelle DLL native viene eseguito prima della strumentazione
Analisi
Nel codice nativo linkato in modo statico, una parte della funzione di inizializzazione DllMain e il codice che esso chiama viene talvolta visualizzato come non coperto, anche se il codice è stato eseguito.Descrizione
Lo strumento di copertura del codice funziona inserendo la strumentazione in un assembly immediatamente prima che l'applicazione venga avviata.Nell'assembly caricato prima di questo momento, il codice di inizializzazione in DllMain esegue l'assembly appena viene caricato e prima che l'applicazione vada in esecuzione.Il codice risulterà non essere coperto.In genere, questo viene applicato agli assembly caricati in modo statico.
Risoluzione
Nessuno.
Vedere anche
Altre risorse
Utilizzo di code coverage per determinare la quantità di codice testato