2016-02-24 13 views
5

私はVS 2015 Enterpriseを使用しています。コードカバレッジを分析するために汎用テストを実行しました。私は機能ごとにカバーされたブロックのリストを見ていますが、それらは一般的に正しいと思われます。しかし、メソッドを右クリックして "ソースコードに移動"すると、いくつかの関数では、ソースコード(関連する.cppファイル)の正しい場所に移動しますが、他の関数では、ヘッダーファイルを開こうとしますソース行番号は正しいが、コードは.hファイルではなく.cppファイル内にある。これは、ソースコードの強調表示に影響します。つまり、.hppにあるVSは.cppで強調表示されていないと考えられる関数です。私はどのスレッドが呼び出されたのかを除いて、関数の違い(同じ可視性、同じヘッダとソースファイル)を判断することはできません。 VSがなぜいくつかのコードを.cppではなく.hに入れていると思うようなアイデアはありますか?Visual Studio 2015コードカバレッジ間違ったファイル

+0

[mcve]が役に立ちます。テンプレート機能を使用していますか? – AndyG

+0

私は同意します。テンプレート機能はありません。 – Jeff

+0

プロジェクトx64またはx86ですか?私はx64に問題があることを思い出します。 – AndyG

答えて

0

VS2015はC++ 11の機能non-static data member initializers(正しくコンパイルされています)をサポートしていますが、この機能ではカバレッジツールがうまく機能します。ここにMCVEがあります。 VS 14.0.24720.00 Update 1を使用しています。再現するには、このプログラムをコンパイルし、Generic Testを使用してコードカバレッジを取得します。 xが初期化されている場合、カバレッジツールは.hファイル内のコンストラクタのコードを探します。 = 0を取り出すと、.cppのようにコンストラクター定義が正しく識別されます。私の製品コードでは、それはコンストラクタではなく、カバレッジツールが.hファイルで定義されていると思われる無作為な関数でした。私の場合は、データメンバの初期化をコンストラクタの初期化リストに移動するだけでした。

//.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; 
} 
関連する問題