다음을 통해 공유


/analyze (코드 분석)

코드 분석 및 제어 옵션을 사용합니다.

구문

일반 분석 옵션:

/analyze[-]
/analyze:only
/analyze:quiet
/analyze:max_paths number
/analyze:stacksize number
/analyze:WX-

분석 플러그 인 옵션:

/analyze:plugin plugin_dll

외부 파일 분석 옵션:

/analyze:external-
/analyze:external:ruleset ruleset_files

분석 로그 옵션:

/analyze:autolog[-]
/analyze:autolog:ext extension
/analyze:log log_path

로그 파일 형식 옵션:

/analyze:log:format:sarif
/analyze:log:format:xml

로그 파일 콘텐츠 옵션:

/analyze:sarif:analyzedfiles[-]
/analyze:sarif:configuration[-]
/analyze:log:compilerwarnings
/analyze:log:includesuppressed

규칙 집합 옵션:

/analyze:rulesetruleset_file

규칙 집합 옵션:

/analyze:projectdirectory project_directory
/analyze:rulesetdirectory ruleset_directories
/analyze:ruleset ruleset_files

인수

일반 분석 옵션

/analyze[-]
코드 분석을 켭니다. 분석을 명시적으로 해제하는 데 사용합니다 /analyze- . /analyze- 는 기본 동작입니다.

기본적으로 분석 출력은 다른 오류 메시지와 같이 콘솔 또는 Visual Studio 출력 창으로 이동합니다. 코드 분석은 분석된 원본 파일의 이름이 있는 filename 로그 filename.nativecodeanalysis.xml파일도 만듭니다.

/analyze:only
기본적으로 컴파일러는 코드를 컴파일하여 코드 분석이 실행되기 전에 개체 파일을 생성합니다. 이 /analyze:only 옵션을 사용하면 컴파일러가 코드 생성 통과를 건너뛰고 코드 분석을 직접 수행합니다. 컴파일러 오류로 인해 코드 분석이 실행되지 않습니다. 그러나 컴파일러는 코드 생성 통과 중에 찾을 수 있는 다른 경고를 보고하지 않습니다. 프로그램에 코드 생성 경고가 없는 경우 분석 결과가 신뢰할 수 없을 수 있습니다. 코드가 오류 또는 경고 없이 코드 생성 구문 검사를 통과하는 경우에만 이 옵션을 사용하는 것이 좋습니다.

/analyze:quiet
분석 출력을 콘솔 또는 Visual Studio 출력 창으로 해제합니다.

/analyze:max_paths number
매개 변수는 number 분석할 최대 코드 경로 수를 지정합니다. 분석은 기본적으로 256개의 경로로 설정됩니다. 값이 클수록 더 철저한 검사가 수행되지만 분석 시간이 더 오래 걸릴 수 있습니다.

/analyze:stacksize number
매개 변수는 number 경고 C6262를 생성하는 스택 프레임의 크기(바이트)를 지정합니다. 기본 스택 프레임 크기는 16KB입니다.

/analyze:WX-
옵션을 사용하는 경우에도 코드 분석 경고를 오류로 처리하지 않도록 컴파일러에 /WX 지시합니다. 자세한 내용은 (경고 수준)을 참조 /WX 하세요.

분석 플러그 인 옵션

/analyze:plugin plugin_dll
코드 분석을 위해 지정된 코드 분석 플러그 인 DLL을 사용하도록 설정합니다.

경로에 plugin_dll 큰따옴표(")가 필요하지 않은 경우 파일 경로와 파일 경로 사이의 /analyze:plugin 공간은 선택 사항입니다. 예를 들어 을 작성 /analyze:plugin EspxEngine.dll할 수 있습니다. 그러나 경로가 큰따옴표로 묶인 경우 파일 경로와 파일 경로 사이에 /analyze:plugin 공백이 있을 수 없습니다. 예: /analyze:plugin"c:\path\to\EspxEngine.dll".

코드 분석 엔진은 플러그 인을 사용하여 특정 범주의 결함을 찾는 데 도움을 줍니다. 코드 분석 엔진에는 다양한 결함을 감지하는 몇 가지 기본 제공 플러그 인이 함께 제공됩니다. 코드 분석 엔진에서 다른 플러그 인을 사용하려면 옵션을 사용하여 해당 플러그 인을 지정합니다 /analyze:plugin .

플러그 인 LocalEspC.dll 은 동시성 관련 분석 검사를 구현합니다. 이러한 검사는 C26100~C26167과 같은 C261XX 범위에서 경고를 발생합니다.

로드 LocalEspC.dll하려면 컴파일러 옵션을 /analyze:plugin LocalEspC.dll사용합니다.

Visual Studio와 함께 제공되는 것과 같은 EspXEngine.dll일부 플러그 인은 추가 분석을 수행할 수 있는 확장을 사용합니다. Visual Studio에는 EspXEngine에 ConcurrencyCheck.dll대한 다음 확장이 HResultCheck.dllCppCoreCheck.dllEnumIndex.dllVariantClear.dll포함되어 있습니다. 동시성 문제, CppCoreGuidelines 위반, 인덱스, HRESULT 값 또는 VARIANT 값으로 값의 enum 부적절한 사용이 각각 있는지 확인합니다.

명령줄에서 빌드할 때 환경 변수를 Esp.Extensions 사용하여 EspXEngine 확장을 지정할 수 있습니다. 예시:

set Esp.Extensions=ConcurrencyCheck.dll;CppCoreCheck.dll;

예제와 같이 세미콜론(;)을 사용하여 확장을 구분합니다. 후행 세미콜론은 필요하지 않습니다. 확장에 절대 파일 경로를 사용하거나 포함하는 디렉터리에서 상대 경로를 지정할 수 있습니다 EspXEngine.dll.

플러그 인은 EspXEngine.dll 동시성 관련 코드 분석 검사를 구현하는 데 사용합니다 ConcurrencyCheck.dll . 이러한 검사는 C26100~C26167과 같은 C261XX 범위에서 경고를 발생합니다.

개발자 명령 프롬프트 창에서 빌드하는 경우 먼저 환경 변수를 Esp.Extensions 설정하여 확장을 지정 ConcurrencyCheck.dll 합니다.

set Esp.Extensions=ConcurrencyCheck.dll

그런 다음 컴파일러 옵션을 /analyze:plugin EspXEngine.dll 사용하여 EspXEngine 플러그 인을 사용합니다.

외부 파일 분석 옵션

Visual Studio 2019 버전 16.10부터 외부 헤더에 대해 다양한 분석 규칙 및 동작을 지정할 수 있습니다. /external:I또는 /external:env/external:anglebrackets 옵션을 사용하여 디렉터리를 "외부" 디렉터리로 지정합니다. 외부 디렉터리 또는 해당 하위 디렉터리에서 사용하여 #include 포함된 모든 파일은 외부 헤더로 간주됩니다. 자세한 내용은 (외부 헤더 진단)을 참조 /external 하세요.

코드 분석은 외부 파일의 분석을 제어하는 다음 옵션을 제공합니다.

/analyze:external-
외부 헤더 파일의 분석을 건너뜁니다. 기본적으로 코드 분석은 다른 파일과 마찬가지로 외부 헤더 파일을 분석합니다. /analyze:external- 옵션을 설정하면 코드 분석은 외부 파일의 템플릿을 제외하고 외부로 지정된 모든 파일을 건너뜁니다. 외부 헤더에 정의된 템플릿은 이 옵션을 사용하여 /external:templates- 외부가 아닌 템플릿으로 처리됩니다. 이 /external:Wn 옵션은 코드 분석에 영향을 주지 않습니다. 예를 들어 코드 분석은 외부 파일을 분석하고 지정된 경우에도 /external:W0 결함을 보고합니다.

/analyze:external:ruleset ruleset_files
매개 변수는 ruleset_files 외부 파일 분석에 사용할 하나 이상의 세미콜론으로 구분된 규칙 집합 파일을 지정합니다. 규칙 집합에 대한 자세한 내용은 "규칙 집합에 대한 옵션" 섹션을 참조하세요.

환경 변수에 지정된 디렉터리 아래의 파일 분석을 건너뛰는 유사하지만 간단한 기능을 제공하는 환경 변수(CAExcludePath)가 있습니다. 디렉터리가 옵션과 CAExcludePath 환경 변수 모두에서 /external:* 지정된 경우 제외된 것으로 간주되며 /analyze:external* 해당 디렉터리에는 옵션이 적용되지 않습니다.

분석 로그 옵션

/analyze:autolog[-]
이 플래그는 분석 중인 각 원본 파일에 대해 분석 로그 파일을 만들 수 있도록 설정하는 데 필요했습니다. 이제 로그 파일이 기본적으로 생성되므로 이 플래그는 대부분 중복됩니다. 사용하는 경우 기본 로그 확장이 대신 . *.pftlog.xml변경됩니다. 파일에 대한 로깅을 사용하지 않도록 설정하는 데 사용합니다 /analyze:autolog- .

/analyze:autolog:ext extension
분석 로그 파일의 기본 확장을 재정의하고 대신 사용합니다 extension . 확장을 사용하는 .sarif 경우 로그 파일은 기본 XML 형식 대신 SARIF 형식을 사용합니다.

/analyze:log log_path
자동으로 생성된 로그 파일 경로 log_path 대신 로그 파일 경로를 지정합니다. 경로에 log_path 후행 백슬래스가 있고 기존 디렉터리를 참조하는 경우 코드 분석은 지정된 디렉터리에 모든 로그 파일을 만듭니다. 그렇지 않으면 log_path 파일 경로를 지정합니다. 파일 경로는 모든 분석된 원본 파일에 대한 로그를 지정된 로그 파일에 결합하도록 컴파일러에 지시합니다. 파일 경로에 확장 프로그램이 있는 .sarif 경우 로그 파일은 기본 XML 형식 대신 SARIF 형식을 사용합니다. /analyze:log:format:* 옵션을 사용하여 이 동작을 재지정할 수도 있습니다.

로그 파일 형식 옵션

Visual Studio 2019 버전 16.9부터 코드 분석을 위해 다양한 로그 형식 옵션을 지정할 수 있습니다.

/analyze:log:format:xml
XML 로그 형식을 강제로 사용하는 파일 확장명은 관련이 없습니다.

/analyze:log:format:sarif
SARIF 로그 형식을 강제로 사용하는 파일 확장명은 관련이 없습니다.

로그 파일 콘텐츠 옵션

Visual Studio 2019 버전 16.9부터 코드 분석을 위해 다양한 로그 콘텐츠 옵션을 지정할 수 있습니다.

/analyze:sarif:analyzedfiles[-]
경고를 발행하지 않는 분석된 파일에 대한 파일 아티팩트 항목을 SARIF 로그 파일에 추가합니다. 이 옵션은 기본적으로 비활성화됩니다. 원본 파일 및 결과를 내보낸 파일에 대한 아티팩트는 항상 포함됩니다.

/analyze:sarif:configuration[-]
규칙 구성 항목을 추가하여 사용자가 기본 규칙 구성을 오버로드하는 방법을 결정합니다(기본적으로 사용하지 않도록 설정됨).

/analyze:log:compilerwarnings
분석 엔진에서 찾은 모든 결함과 모든 컴파일러 경고를 분석 로그 파일에 추가합니다. 기본적으로 컴파일러 경고는 분석 로그 파일에 포함되지 않습니다. 코드 분석 중 컴파일러 경고에 대한 자세한 내용은 이 옵션을 참조하세요 /analyze:only .

/analyze:log:includesuppressed
표시되지 않는 경고와 지원되지 않는 경고를 모두 분석 로그 파일에 추가합니다. 기본적으로 표시되지 않는 경고는 분석 로그 파일에 포함되지 않습니다. 규칙 집합 파일이 분석을 위해 지정된 경우 규칙 집합 파일에서 사용하지 않도록 설정된 경고는 지정된 경우에도 /analyze:log:includesuppressed 로그에 포함되지 않습니다.

규칙 집합 옵션

/analyze:projectdirectory project_directory
현재 프로젝트 디렉터리를 지정합니다. 규칙 집합(또는 포함된 항목)이 파일 이름인 경우 컴파일러는 먼저 지정된 project_directory아래에 있는 파일을 찾습니다. 찾을 수 없으면 다음으로 지정된 (있는 경우)를 /analyze:rulesetdirectory검색 ruleset_directories 합니다. 규칙 집합(또는 포함된 항목)이 상대 경로인 경우 컴파일러는 먼저 프로젝트 디렉터리 아래에서 파일을 찾습니다. 규칙 집합을 찾을 수 없는 경우 현재 작업 디렉터리를 찾습니다. 이 옵션은 Visual Studio 2019 버전 16.9부터 사용할 수 있습니다.

/analyze:rulesetdirectory ruleset_directories
세미콜론으로 구분된 규칙 집합 검색 경로 목록을 지정합니다. 규칙 집합(또는 포함된 항목)이 파일 이름인 경우 컴파일러는 먼저 지정된 /analyze:projectdirectory파일(있는 경우)에 따라 project_directory 지정된 파일과 지정된 ruleset_directories파일을 찾습니다. 이 옵션은 Visual Studio 2019 버전 16.9부터 사용할 수 있습니다.

/analyze:ruleset ruleset_files
분석에 사용할 하나 이상의 규칙 집합 파일을 지정합니다. 이 옵션을 사용하면 분석 효율성을 높일 수 있습니다. 분석 엔진은 실행하기 전에 규칙 집합 파일에 지정된 활성 규칙이 없는 검사기를 제외하려고 합니다. 그렇지 않으면 엔진이 사용하도록 설정된 모든 검사기를 실행합니다.

/analyze:ruleset ruleset_file
분석에 사용할 규칙 집합 파일을 지정합니다. 이 옵션을 사용하면 분석 효율성을 높일 수 있습니다. 분석 엔진은 실행하기 전에 규칙 집합 파일에 지정된 활성 규칙이 없는 검사기를 제외하려고 합니다. 그렇지 않으면 엔진이 사용하도록 설정된 모든 검사기를 실행합니다.

Visual Studio와 함께 제공되는 규칙 집합 파일은 .에서 찾을 수 있습니다 %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

다음 예제 사용자 지정 규칙 집합은 분석 엔진에 C6001 및 C26494를 확인하고 경고로 보고하도록 지시합니다.

인수의 전체 경로를 지정하는 한 이 파일을 어디에나 배치할 수 있습니다.

인수의 전체 경로를 지정하거나 또는 /analyze:rulesetdirectory 옵션에 지정된 /analyze:projectdirectory 디렉터리 아래에 이 파일을 배치할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="15.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

기본적으로 규칙 집합 파일의 파일 확장명은 .입니다 *.ruleset. Visual Studio는 규칙 집합 파일을 검색할 때 기본 확장을 사용합니다. 그러나 모든 확장을 사용할 수 있습니다.

규칙 집합 에 대한 자세한 내용은 규칙 집합을 사용하여 실행할 C++ 규칙을 지정합니다.

설명

자세한 내용은 C/C++ 개요 에 대한 코드 분석 및 C/C++ 경고에 대한 코드 분석을 참조하세요.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>코드 분석>일반 속성 페이지를 선택합니다.

  3. 코드 분석 속성을 하나 이상 수정합니다 .

  4. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.

Visual Studio 2019 버전 16.10 이상에서 외부 파일 분석 옵션을 설정하려면 다음을 수행합니다.

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다.

  2. 구성 속성>C/C++>외부 포함 속성 페이지를 선택합니다.

  3. 속성을 설정합니다.

    • 외부 헤더에 대한 코드 분석을 사용하지 않도록 설정하면 옵션이 설정됩니다/analyze:external-.

    • 외부 헤더에 대한 분석 규칙 집합이 /analyze:external:ruleset path 옵션을 설정합니다.

  4. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

  1. EnablePREfast을(를) 참조하세요.

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문