코드 검사 문제 해결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.

색 지정이 사용된 코드 검사 결과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, 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.

해결—두 가지 유형의 오류가 있습니다.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.

해결—없음.Resolution—None.

참고 항목See also