2016-02-24 18 views
5

Utilizzo VS 2015 Enterprise e ho eseguito un test di unità generico per analizzare la copertura del codice. Sto osservando l'elenco dei blocchi coperti per funzione, e in generale sembrano corretti. Tuttavia, quando faccio clic con il pulsante destro del mouse su un metodo -> "Vai al codice sorgente", su alcune funzioni esso va nella posizione corretta nel codice sorgente (il file .cpp rilevante), mentre su altri tenta di aprire il file di intestazione (il numero della riga di origine è corretto, ma il codice è nel file .cpp, non nel file .h). Ciò influenza l'evidenziazione del codice sorgente - le funzioni che VS pensa siano in .h non sono evidenziate nel file .cpp. Non riesco a determinare alcuna differenza nelle funzioni (stessa visibilità, stessa intestazione e file sorgente), tranne forse il thread su cui sono chiamati. Qualche idea sul perché VS pensi che un codice sia in .h piuttosto che in .cpp?Visual Studio 2015 Copertura del codice File errato

+0

[mcve] sarebbe di aiuto. Stai usando le funzioni basate su modelli? – AndyG

+0

Sono d'accordo. Nessuna funzione basata su modelli. – Jeff

+0

Il progetto x64 o x86? Ricordo che ci sono problemi con x64. – AndyG

risposta

0

Apparentemente, anche se VS 2015 supporta la funzione C++ 11 non-static data member initializers (viene compilato correttamente), lo strumento di copertura soffoca questa funzione. Ecco l'MCVE. Sto usando VS 14.0.24720.00 Update 1. Per riprodurre, compilare questo programma quindi ottenere la copertura del codice eseguendolo utilizzando uno Generic Test. Se x viene inizializzato, lo strumento di copertura cerca il codice per il costruttore nel file .h. Se si estrae = 0, identifica correttamente la definizione del costruttore come in .cpp. Nel mio codice prodotto, non era il costruttore, ma le funzioni apparentemente casuali che lo strumento di copertura pensavano erano definite nel file .h. La correzione, nel mio caso, era solo per spostare l'inizializzazione dei membri dei dati nella lista di inizializzazione del costruttore.

//.h 
class Test 
{ 
public: 
    Test(); 
    ~Test(); 

    void Func1(); 

    void Func2(); 

    void Func3(); 

    int x = 0; 
}; 

.

// .cpp 
#include "Test.h" 

#include <iostream> 

Test::Test() 
{ 
    std::cout << "in Test()" << std::endl; 
} 

Test::~Test() 
{ 
} 

void Test::Func1() 
{ 
    std::cout << "in Func1" << std::endl; 

    Func2(); 

    Func3(); 
} 

void Test::Func2() 
{ 
    std::cout << "in Func2" << std::endl; 
} 

void Test::Func3() 
{ 
    std::cout << "in Func3" << std::endl; 
} 
Problemi correlati