コード カバレッジのトラブルシューティングTroubleshoot 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 reasons why you can get empty results. この記事はそれらの問題解決に役立ちます。This article helps you 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.

色分けされたコード カバレッジの結果

詳細については、「コード カバレッジを使用した、テストされるプロジェクトのコード割合の確認」を参照してください。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, there's 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 rerun 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

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

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

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

解決—ビルドが .pdb ファイルを生成するように設定されていることを確認します。Resolution—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

解析—バイナリにガイド付き最適化のプロファイルなどの詳細な最適化が適用されたかどうか、またはバイナリが vsinstr.exe や vsperfmon.exe などのプロファイリング ツールによってインストルメント化されたかどうかを確認します。Analysis—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 can't 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

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

説明—Visual Studio のコード カバレッジ分析は、マネージ コードとネイティブ (C++) コードでのみ使用できます。Explanation—Code coverage analysis in Visual Studio is available only on managed and native (C++) code. サードパーティ製ツールで作業している場合、コードの一部またはすべてが別のプラットフォームで実行される可能性があります。If you're 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).

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

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

解析—カスタム .runsettings ファイルを使用している場合、ファイルに構文エラーが含まれている可能性があります。Analysis—If you're using a custom .runsettings file, it might contain a syntax error. コード カバレッジが実行されません。テスト実行の最後にコード カバレッジ ウィンドウが開かれないか、ウィンドウに古い結果が表示されます。Code coverage is not run, and either the code coverage window doesn't open at the end of the test run, or it shows old results.

説明—カスタム .runsettings ファイルで単体テストを実行して、コード カバレッジのオプションを構成することができます。Explanation—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.

解決—エラーには次の 2 種類があります。Resolution—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

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

説明—カスタム .runsettings ファイルで単体テストを実行して、コード カバレッジのオプションを構成することができます。Explanation—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.

解決—.runsettings ファイルからすべての Include ノードを削除し、すべての Exclude ノードを削除します。Resolution—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

解析—静的にリンクされたネイティブ コードでは、初期化関数 DllMain の一部とそれが呼び出すコードが、コードが実行された場合でも未カバーとして表示されることがあります。Analysis—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 beforehand, the initialization code in DllMain executes as soon as the assembly loads, and before the application runs. そのコードは未カバーであるように見えます。That code appears to be not covered. 通常、これは静的に読み込まれたアセンブリに適用されます。Typically, this applies to statically loaded assemblies.


関連項目See also