드라이버에 대한 Code Analysis 실행하는 방법
드라이버용 Code Analysis 소스 코드의 가능한 결함에 대한 정보를 제공합니다. 코드 분석을 수동으로 실행할 수 있으며 각 빌드에서 자동으로 코드 분석을 실행할 수도 있습니다.
항목 내용
코드 분석 실행
드라이버 소스 코드에서 수동으로 코드 분석을 실행하려면
- Visual Studio 드라이버 프로젝트 파일 또는 솔루션을 선택하고 분석할 프로젝트 구성 및 플랫폼을 선택합니다.
- 분석 또는 빌드 메뉴에서 솔루션에서 Code Analysis 실행을 클릭합니다.
각 빌드에서 드라이버 소스 코드에 대한 코드 분석을 자동으로 실행하려면
- Visual Studio 솔루션 탐색기 드라이버 프로젝트 또는 솔루션을 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.
- 프로젝트의 속성 대화 상자에서 Code Analysis 클릭합니다.
- C/C++ 속성 Code Analysis 페이지에서 분석하려는 프로젝트 구성 및 플랫폼(예: Windows 8 및 Win32)을 선택합니다.
- 빌드 시 C/C++에 대해 Code Analysis 사용하도록 선택합니다.
- 규칙 집합에서 Microsoft 드라이버 권장 규칙을 선택합니다. 드라이버에 대한 기본 규칙 집합입니다.
- 빌드 메뉴에서 솔루션 빌드를 클릭합니다.
코드 분석 결과 보기
소스 코드에서 가능한 결함이 발견되면 Code Analysis 결과 창에 코드 분석 경고 번호와 결함이 발생한 소스 파일의 줄 번호가 표시됩니다.
결함을 보려면
Code Analysis 결과 창에서 줄 번호를 클릭하고 결함에 대한 설명이 Code Analysis 결과 창에 표시됩니다.
코드 창에 소스 코드가 표시되고 결함이 발생하는 위치를 나타냅니다.
특정 경고에 대해 자세히 알아보려면 Code Analysis 결과 창에서 경고를 클릭합니다.
빌드와 연결된 코드 분석 로그 파일을 보려면
- 빌드 구성 및 플랫폼(예
\\Windows7Release\\x64: )에 대한 디렉터리로 이동합니다. - 권장 규칙을 사용하는 경우 로그 파일이 호출
vc.\*codeanalysis.xml됩니다. Windows Server 2012 드라이버를 만드는 경우 이 파일을 사용하여 드라이버 확인 로그를 만듭니다.
결함 보고서 표시 안 함
경우에 따라 특정 경고 메시지의 보고서를 표시하지 않을 수 있습니다. 예를 들어 경고가 주로 정보이며 오류의 원인을 알고 있는 경우입니다.
경고 메시지를 표시하지 않는 방법
보고된 결함의 인스턴스를 제거하려면 Code Analysis 결과 창에서 줄 번호 및 경고를 선택합니다.
경고에 대한 확장된 설명에서 ActionsSuppress>MessageIn> 원본을 클릭합니다.
표시 안 함 지정자가 있는 pragma 경고 지시문은 #pragma 경고 문 바로 뒤에 있는 코드 줄에 대해서만 경고를 표시하지 않습니다.
#pragma warning(suppress: 6014)
커널 모드 드라이버의 경고 C6262에 대한 스택 사용 제한 변경
사용자 모드 및 커널 모드 코드에서는 스택 공간이 제한되며 스택 페이지를 커밋하지 않으면 스택 오버플로 예외가 발생합니다. 사용 가능한 총 스택 공간은 12KB에 불과하기 때문에 높은 스택 사용량은 커널 모드에서 특히 중요합니다. 커널 모드 코드는 스택 사용을 적극적으로 제한해야 합니다.
Code Analysis 도구는 함수에서 1KB 이상의 스택 공간을 로컬로 사용하는 경우 경고 C6262를 실행합니다. 리소스를 많이 사용할 수 있는 함수를 조사하려는 경우 C6262에서 사용하는 스택 임계값 제한을 사용자 지정하거나 낮출 수 있습니다. 스택 임계값 제한을 낮추면 Code Analysis 도구에서 더 많은 문제를 발견할 수 있습니다. 그런 다음 이러한 스택 사용 문제를 해결하도록 선택할 수 있습니다. 예를 들어 임계값을 400바이트로 낮추어 다른 함수가 리소스를 사용하고 있는지 확인할 수 있습니다.
C6262에 대한 스택 크기 제한을 사용자 지정하려면
- 메모장 또는 다른 텍스트 편집기에서 커널 모드 드라이버(또는 구성 요소)에 대한 Visual Studio 프로젝트 파일(.vcxproj)을 엽니다.
- 컴파일러 <ClCompile에 대한 새 ItemDefinitionGroup을 추가합니다>.><
- <PREfastAdditionalOptions> 요소를 추가하고 stacksizebytes<>를 설정합니다. 기본값은 stacksize1024입니다.
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
프로젝트 파일을 저장합니다. Visual Studio 시작하고, 업데이트된 드라이버 프로젝트를 로드하고, 코드 분석을 실행합니다.
기본값인 1KB로 되돌리려면 프로젝트 파일에 대한 변경 내용을 실행 취소하거나 스택 크기 값을 stacksize1024로 변경합니다.