トラブルシューティング コード カバレッジTroubleshooting Code Coverage

Visual Studio のコード カバレッジ分析ツールは、ネイティブ アセンブリとマネージ アセンブリのデータを収集します (.dll または .exe ファイル)。The code coverage analysis tool in Visual Studio collects data for native and managed assemblies (.dll or .exe files). しかし、[コード カバレッジの結果] ウィンドウに "空の結果が生成されました: ...." のようなエラーが表示される場合があります。このエラーが発生する原因はいくつかあります。However, in some cases, the Code Coverage Results window displays an error similar to "Empty results generated: ...." There are several possible reasons why this might happen. このトピックは、これらの問題を解決することを目的にしています。This topic is intended to help resolve those issues.

表示される内容What you should see

[テスト] メニューの [コード カバレッジの分析] コマンドを選択し、ビルドとテストが正常に実行された場合、[コード カバレッジ] ウィンドウに結果の一覧が表示されます。If you choose an Analyze Code Coverage command on the Test menu, and if the build and tests run successfully, then you should see a list of results in the Code Coverage window. 詳細を表示するために、項目を展開する必要がある場合があります。You might have to expand the items to see the detail.

色分けされたコード カバレッジの結果Code coverage results with coloring

詳細については、「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」を参照してください。For more information, see Using Code Coverage to Determine How Much Code is being Tested.

結果が表示されなかったり古い結果が表示されたりすることの考えられる原因Possible reasons for seeing no results or old results

適切なエディションの Visual Studio を使用していますか?Do you have the right edition of Visual Studio?

Visual Studio Enterprise が必要です。You need Visual Studio Enterprise.

テストが実行されなかったNo tests were executed

分析Analysis
出力ウィンドウをチェックします。Check your output window. [出力元の表示] ドロップダウン リストで、[テスト] を選択します。In the Show Output from drop-down list, choose Tests. 記録された警告またはエラーがあるかどうかを確認します。See if there are any warnings or errors logged.

説明Explanation
コード カバレッジ分析は、テストの実行中に行われます。Code coverage analysis is done while tests are running. 分析には、テストの実行時にメモリに読み込まれるアセンブリだけが含まれます。It only includes assemblies that are loaded into memory when the tests run. テストが実行されない場合、コード カバレッジで報告される結果はありません。If none of the tests are executed then there is nothing for code coverage to report.

解決策Resolution
テスト エクスプローラーで、[すべて実行] を選択してテストが正常に実行されることを確認します。In Test Explorer, choose Run All to verify that the tests run successfully. [コード カバレッジの分析] を使用する前にエラーを修正します。Fix any failures before using Analyze Code Coverage.

前の結果が表示されているYou're looking at a previous result

テストを変更し、再実行したときに、まだ前のコード カバレッジの結果が表示され、コードの色分けも前の実行のものである場合があります。When you modify and re-run your tests, a previous code coverage result can still be visible, including the code coloring from that old run.

  1. コード カバレッジの分析を実行します。Run Analyze Code Coverage.

  2. [コード カバレッジの結果] ウィンドウで、最新の結果セットが選択されていることを確認します。Make sure that you have selected the most recent result set in the Code Coverage results window.

.pdb (シンボル) ファイルが使用できない.pdb (symbol) files are unavailable

分析Analysis
コンパイルの対象フォルダー (通常は bin\debug) を開き、アセンブリごとに、.dll または .exe ファイルと同じディレクトリに .pdb ファイルがあることを確認します。Open the compile target folder (typically bin\debug), and verify that for each assembly, there is a .pdb file in the same directory as the .dll or .exe file.

説明Explanation
コード カバレッジ エンジンを使用するには、すべてのアセンブリにテストの実行中にアクセスできる .pdb ファイルがあることが必要です。The code coverage engine requires that every assembly has its associated .pdb file accessible during the test run. 特定のアセンブリの .pdb ファイルがない場合、そのアセンブリは解析されません。If there is no .pdb file for a particular assembly, it will not be analyzed.

.pdb ファイルは、.dll または .exe ファイルと同じビルドから生成されている必要があります。The .pdb file must be generated from the same build as the .dll or .exe files.

解像度Resolution
ビルドが .pdb ファイルを生成するように設定されていることを確認します。Make sure that your build settings generate the .pdb file. プロジェクトのビルド時に .pdb ファイルが更新されない場合は、プロジェクトのプロパティを開き、[ビルド] ページ、[詳細設定] の順に選択し、[デバッグ情報] を確認します。If the .pdb files are not updated when the project is built, then open the project properties, select the Build page, choose Advanced and inspect Debug Info.

.pdb ファイルと .dll または .exe ファイルが別の場所にある場合は、.pdb ファイルを同じディレクトリにコピーします。If the .pdb and .dll or .exe files are in different places, copy the .pdb file to the same directory. 別の場所の .pdb ファイルを検索するようにコード カバレッジ エンジンを構成することもできます。It is also possible to configure code coverage engine to search for .pdb files in another location. 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。For more information, see Customizing Code Coverage Analysis.

インストルメント化、または最適化されたバイナリを使用しているUsing an instrumented or optimized binary

分析Analysis
バイナリにガイド付き最適化のプロファイルなどの詳細な最適化が適用されたかどうか、またはバイナリが vsinstr.exe や vsperfmon.exe などのプロファイリング ツールによってインストルメント化されたかどうかを確認します。Determine if the binary has undergone any form of advanced optimization such as Profile Guided Optimization, or has been instrumented by a profiling tool such as vsinstr.exe or vsperfmon.exe.

説明Explanation
アセンブリが別のプロファイリング ツールによって、既にインストルメント化または最適化されている場合、アセンブリはコード カバレッジ分析から省略されます。If an assembly has already been instrumented or optimized by another profiling tool, the assembly is omitted from the code coverage analysis.

コード カバレッジ分析は、このようなアセンブリでは実行できません。Code coverage analysis cannot be performed on such assemblies.

解像度Resolution
最適化をオフにし、新しいビルドを使用します。Switch off optimization and use a new build.

コードがマネージ (.NET) コードまたはネイティブ (C++) コードではないCode is not managed (.NET) or native (C++) code

分析Analysis
マネージ コードまたは C++ コードでテストを実行していることを確認します。Verify that you are running some tests on managed or C++ code.

説明Explanation
Visual Studio のコード カバレッジ分析は、マネージ コードとネイティブ (C++) コードでのみ使用できます。Code coverage analysis in Visual Studio is available only on managed and native (C++) code. サードパーティ製ツールで作業している場合、コードの一部またはすべてが別のプラットフォームで実行される可能性があります。If you are working with third-party tools, some or all of the code might execute on a different platform.

解像度Resolution
解決策はありません。None available.

アセンブリが NGen によってインストールされたAssembly has been installed by NGen

分析Analysis
アセンブリがネイティブ イメージ キャッシュから読み込まれていないことを確認します。Verify that the assembly is not loaded from the native image cache.

説明Explanation
パフォーマンス上の理由から、ネイティブ イメージ アセンブリは分析されません。For performance reasons, native image assemblies are not analyzed. 詳細については、「Ngen.exe (ネイティブ イメージ ジェネレーター)」を参照してください。For more information, see Ngen.exe (Native Image Generator).

解決策Resolution
MSIL バージョンのアセンブリを使用します。Use an MSIL version of the assembly. アセンブリを NGen で操作しません。Do not process it with NGen.

カスタム .runsettings ファイルに無効な構文が含まれているCustom .runsettings file with bad syntax

分析Analysis
カスタム .runsettings ファイルを使用している場合、ファイルに構文エラーが含まれている可能性があります。If you are using a custom .runsettings file, it might contain a syntax error.

その場合、コード カバレッジはまったく実行されません。This results in no code coverage run at all. テスト実行の最後にコード カバレッジ ウィンドウが開かれないか、ウィンドウに古い結果が表示されます。Either the code coverage window does not open at the end of the test run, or it shows old results.

説明Explanation
カスタム .runsettings ファイルで単体テストを実行して、コード カバレッジのオプションを構成することができます。You can run your unit tests with a custom .runsettings file to configure code coverage options. オプションで、ファイルを含めるか、除外するかを指定できます。The options allow you to include or exclude files. 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。For more information, see Customizing Code Coverage Analysis.

解決策Resolution
エラーには次の 2 種類があります。There are two possible types of faults:

  • XML エラーXML error

    Visual Studio XML エディターで .runsettings ファイルを開きます。Open the .runsettings file in the Visual Studio XML editor. エラーを示す箇所を探します。Look for error indications.

  • 正規表現エラーRegular expression error

    ファイル内の各文字列は正規表現です。Each string in the file is a regular expression. エラーのすべてをレビューし、特に次の文字を探します。Review each one for errors, and in particular look for :

    • 一致しないかっこ (...) またはエスケープされないかっこ \(...\)。Mismatched parentheses (...) or unescaped parentheses \(...\). 検索文字列内でかっこを一致させる場合は、エスケープする必要があります。If you want to match a parenthesis in the search string, you must escape it. たとえば、関数を一致させるには .*MyFunction\(double\) を使用します。For example, to match a function use: .*MyFunction\(double\)

    • 式の先頭のアスタリスクまたは正符号。Asterisk or plus at the start of an expression. 任意の文字列と一致させるには、ピリオドとアスタリスクを続けて使用します (.*)。To match any string of characters, use a dot followed by an asterisk: .*

カスタム .runsettings ファイルに不適切な除外が含まれているCustom .runsettings file with incorrect exclusions

分析Analysis
カスタム .runsettings ファイルを使用している場合は、アセンブリが含まれていることを確認します。If you are using a custom .runsettings file, make sure that it includes your assembly.

説明Explanation
カスタム .runsettings ファイルで単体テストを実行して、コード カバレッジのオプションを構成することができます。You can run your unit tests with a custom .runsettings file to configure code coverage options. オプションで、ファイルを含めるか、除外するかを指定できます。The options allow you to include or exclude files. 詳細については、「コード カバレッジ分析のカスタマイズ」を参照してください。For more information, see Customizing Code Coverage Analysis.

解決策Resolution
.runsettings ファイルからすべての Include ノードを削除し、すべての Exclude ノードを削除します。Remove all the Include nodes from the .runsettings file, and then remove all the Exclude nodes. これで問題が解決する場合は、各ノードを段階的に元に戻します。If that fixes the problem, put them back in stages.

DataCollectors ノードがコード カバレッジを指定していることを確認します。Make sure the DataCollectors node specifies Code Coverage. コード カバレッジ分析のカスタマイズ」の例と比較します。Compare it with the sample in Customizing Code Coverage Analysis.

一部のコードが常に未カバーとして表示されるSome code is always shown as not covered

ネイティブ DLL 内の初期化コードがインストルメンテーションの前に実行されるInitialization code in native DLLs is executed before instrumentation

分析Analysis
静的にリンクされたネイティブ コードでは、初期化関数 DllMain の一部とそれが呼び出すコードが、コードが実行された場合でも未カバーとして表示されることがあります。In statically linked native code, part of the initialization function DllMain and code that it calls is sometimes shown as not covered, even though the code has been executed.

説明Explanation
コード カバレッジ ツールは、アプリケーションが実行を開始する直前にアセンブリにインストルメンテーションを挿入することで動作します。The code coverage tool works by inserting instrumentation into an assembly just before the application starts running. この時点より前に読み込まれるアセンブリでは、アプリケーションの実行前の、アセンブリの読み込み直後に DllMain 内の初期化コードが実行されます。In any assembly loaded before this time, the initialization code in DllMain executes as soon as the assembly loads, and before the application runs. そのコードは未カバーであるように見えます。That code will appear to be not covered.

通常、これは静的に読み込まれたアセンブリに適用されます。Typically, this applies to statically loaded assemblies.

解像度Resolution
なし。None.

関連項目See Also

コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認Using Code Coverage to Determine How Much Code is being Tested