빠른 시작: C/C++용 코드 분석

C 또는 C++ 코드에 대한 코드 분석을 정기적으로 실행하여 애플리케이션의 품질을 향상시킬 수 있습니다. 코드 분석은 일반적인 문제와 좋은 프로그래밍 방식의 위반을 찾는 데 도움이 될 수 있습니다. 그리고 테스트를 통해 검색하기 어려운 결함을 찾습니다. 해당 경고는 컴파일러 오류 및 경고와 다릅니다. 문제를 일으키는 것으로 알려진 특정 코드 패턴을 검색합니다. 즉, 유효한 코드이지만 사용자 또는 코드를 사용하는 다른 사용자에 대해 여전히 문제가 발생할 수 있습니다.

프로젝트에 대한 규칙 집합 구성

  1. 솔루션 탐색기 프로젝트 이름의 바로 가기 메뉴를 열고 속성을 선택합니다.

  2. 필요에 따라 구성플랫폼 목록에서 빌드 구성 및 대상 플랫폼을 선택합니다.

  3. 선택한 구성을 사용하여 프로젝트를 빌드할 때마다 코드 분석을 실행하려면 빌드 검사 코드 분석 사용 상자를 선택합니다. 분석 메뉴를 연 다음 ProjectName에서코드 분석 실행 또는 파일에서 코드 분석 실행을 선택하여 코드 분석을 수동으로 실행할 수도 있습니다.

  4. 사용하려는 규칙 집합을 선택하거나 사용자 지정 규칙 집합만듭니다. LLVM/clang-cl 을 사용하는 경우 Visual Studio 에서 Clang-Tidy를 사용하여 Clang-Tidy 분석 옵션을 구성합니다.

표준 C/C++ 규칙 집합

Visual Studio에는 네이티브 코드에 대한 다음 표준 규칙 집합이 포함되어 있습니다.

규칙 집합 설명
C++ 코어 검사 산술 규칙 이러한 규칙은 C++ 핵심 지침의 산술 연산과 관련된 검사 적용합니다.
C++ 코어 검사 경계 규칙 이러한 규칙은 C++ 핵심 지침의 경계 프로필을 적용합니다.
C++ Core Check 클래스 규칙 이러한 규칙은 C++ 핵심 지침의 클래스와 관련된 검사 적용합니다.
C++ Core Check 동시성 규칙 이러한 규칙은 C++ 핵심 지침의 동시성과 관련된 검사 적용합니다.
C++ Core Check Const 규칙 이러한 규칙은 C++ 핵심 지침에서 const 관련 검사 적용합니다.
C++ Core Check 선언 규칙 이러한 규칙은 C++ 핵심 지침의 선언과 관련된 검사 적용합니다.
C++ 코어 확인 열거형 규칙 이러한 규칙은 C++ Core 지침의 열거형 관련 검사 적용합니다.
C++ Core Check 실험적 규칙 이러한 규칙은 몇 가지 실험적 검사 수집합니다. 결국 이러한 검사 다른 규칙 집합으로 이동하거나 완전히 제거될 것으로 예상합니다.
C++ Core Check 함수 규칙 이러한 규칙은 C++ 핵심 지침의 함수와 관련된 검사 적용합니다.
C++ Core Check GSL 규칙 이러한 규칙은 C++ 핵심 지침에서 지침 지원 라이브러리와 관련된 검사 적용합니다.
C++ Core Check 수명 규칙 이러한 규칙은 C++ 핵심 지침의 수명 프로필을 적용 합니다.
C++ Core Check 소유자 포인터 규칙 이러한 규칙은 C++ 핵심 지침과 관련된 owner<T> 리소스 관리 검사 적용합니다.
C++ Core Check Raw Pointer Rules 이러한 규칙은 C++ 핵심 지침의 원시 포인터와 관련된 리소스 관리 검사 적용합니다.
C++ 핵심 검사 규칙 이러한 규칙은 C++ 핵심 지침에서 검사 하위 집합을 적용합니다. 이 규칙 집합을 사용하여 열거형 및 실험적 규칙 집합을 제외한 모든 C++ Core Check 규칙을 포함합니다.
C++ Core Check 공유 포인터 규칙 이러한 규칙은 C++ 핵심 지침의 공유 포인터 의미 체계를 사용하는 형식과 관련된 리소스 관리 검사 적용합니다.
C++ Core CHECK STL 규칙 이러한 규칙은 C++ 핵심 지침에서 C++ 표준 라이브러리와 관련된 검사 적용합니다.
C++ 코어 확인 스타일 규칙 이러한 규칙은 C++ 핵심 지침식 및 문 사용과 관련된 검사 적용합니다.
C++ Core Check 형식 규칙 이러한 규칙은 C++ 핵심 지침의 형식 프로필을 적용 합니다.
C++ Core Check Unique Pointer Rules 이러한 규칙은 C++ 핵심 지침의 고유한 포인터 의미 체계를 사용하는 형식과 관련된 리소스 관리 검사 적용합니다.
동시성 검사 규칙 이러한 규칙은 C++에서 Win32 동시성 패턴 검사 집합을 적용합니다.
동시성 규칙 C++ 핵심 지침 의 동시성 규칙을 동시성 검사 규칙에 추가합니다.
Microsoft 기본 최소 규칙 이러한 규칙은 잠재적인 보안 허점 및 애플리케이션 충돌을 포함하여 네이티브 코드에서 가장 중요한 문제에 중점을 줍니다. 네이티브 프로젝트에 대해 만든 사용자 지정 규칙 집합에 이 규칙 집합을 포함하는 것이 좋습니다.
Microsoft 네이티브 권장 규칙 이러한 규칙은 네이티브 코드에서 가장 중요하고 일반적인 문제에 초점을 맞춥니다. 이러한 문제에는 잠재적인 보안 허점 및 애플리케이션 크래시가 포함됩니다. 네이티브 프로젝트에 대해 만든 사용자 지정 규칙 집합에 이 규칙 집합을 포함하는 것이 좋습니다. 이 규칙 집합은 Visual Studio Professional 버전 이상에서 작동하도록 설계되었습니다. 여기에는 Microsoft 네이티브 최소 규칙의 모든 규칙이 포함됩니다.

Visual Studio에는 관리 코드에 대한 다음 표준 규칙 집합이 포함되어 있습니다.

규칙 집합 설명
Microsoft 기본 정확성 규칙 이러한 규칙은 프레임워크 API 사용 시 발생하는 논리 오류 및 일반적인 실수에 중점을 줍니다. 최소 권장 규칙에서 보고한 경고 목록에서 확장하도록 이 규칙 집합을 포함합니다.
Microsoft 기본 디자인 지침 규칙 이러한 규칙은 코드를 쉽게 이해하고 사용할 수 있도록 모범 사례를 적용하는 데 중점을 줍니다. 프로젝트에 라이브러리 코드가 포함되거나 쉽게 기본 가능한 코드에 대한 모범 사례를 적용하려는 경우 이 규칙 집합을 포함합니다.
Microsoft 확장 정확성 규칙 이러한 규칙은 보고된 논리 및 프레임워크 사용 오류를 최대화하기 위해 기본 정확성 규칙을 확장합니다. COM interop 및 모바일 애플리케이션과 같은 특정 시나리오에 중점을 둡니다. 이러한 시나리오 중 하나가 프로젝트에 적용되는 경우 또는 프로젝트에서 더 많은 문제를 찾으려면 이 규칙 집합을 포함하는 것이 좋습니다.
Microsoft 확장 디자인 지침 규칙 이러한 규칙은 보고된 유용성 및 기본 지속성 문제를 최대화하기 위해 기본 디자인 지침 규칙을 확장합니다. 몇몇 지침에 추가로 중점을 둡니다. 프로젝트에 라이브러리 코드가 포함되거나 기본 달성 가능한 코드를 작성하기 위해 가장 높은 표준을 적용하려는 경우 이 규칙 집합을 포함하는 것이 좋습니다.
Microsoft 세계화 규칙 이러한 규칙은 다른 언어, 로캘 및 문화권에서 사용될 때 애플리케이션의 데이터가 올바르게 표시되지 않도록 하는 문제에 초점을 맞춥니다. 애플리케이션이 지역화 및/또는 세계화된 경우 이 규칙 집합을 포함합니다.
Microsoft 관리되는 최소 규칙 이러한 규칙은 코드 분석이 가장 정확한 코드에서 가장 중요한 문제에 초점을 맞춥니다. 이러한 규칙은 개수가 적으며 제한된 Visual Studio 버전에서만 실행하기 위한 것입니다. 다른 Visual Studio 버전과 함께 MinimumRecommendedRules.ruleset을 사용합니다.
Microsoft 관리되는 권장 규칙 이러한 규칙은 코드에서 가장 중요한 문제에 초점을 맞춥니다. 이러한 문제에는 잠재적인 보안 허점, 애플리케이션 충돌 및 기타 중요한 논리 및 디자인 오류가 포함됩니다. 프로젝트에 대해 만든 사용자 지정 규칙 집합에 이 규칙 집합을 포함하는 것이 좋습니다.
Microsoft Mixed(C++ /CLR) 최소 규칙 이러한 규칙은 공용 언어 런타임을 지원하는 C++ 프로젝트에서 가장 중요한 문제에 초점을 맞춥니다. 이러한 문제에는 잠재적인 보안 허점, 애플리케이션 충돌 및 기타 중요한 논리 및 디자인 오류가 포함됩니다. 공용 언어 런타임을 지원하는 C++ 프로젝트에 대해 만든 사용자 지정 규칙 집합에 이 규칙 집합을 포함하는 것이 좋습니다.
Microsoft Mixed(C++ /CLR) 권장 규칙 이러한 규칙은 공용 언어 런타임을 지원하는 C++ 프로젝트에서 가장 일반적이고 중요한 문제에 초점을 맞춥니다. 이러한 문제에는 잠재적인 보안 허점, 애플리케이션 충돌 및 기타 중요한 논리 및 디자인 오류가 포함됩니다. 이 규칙 집합은 Visual Studio Professional 버전 이상에서 사용하도록 설계되었습니다.
Microsoft 보안 규칙 이 규칙 집합에는 모든 Microsoft 보안 규칙이 포함됩니다. 보고되는 잠재적인 보안 문제의 수를 최대화하기 위해 이 규칙 집합을 포함합니다.

모든 규칙을 포함하려면 다음을 수행합니다.

규칙 집합 설명
Microsoft 모든 규칙 이 규칙 집합에는 모든 규칙이 포함됩니다. 이 규칙 집합을 실행하면 많은 경고가 보고될 수 있습니다. 이 규칙 집합을 사용하여 코드의 모든 문제를 포괄적으로 파악할 수 있습니다. 프로젝트에 가장 적합한 더 집중적인 규칙 집합을 결정하는 데 도움이 될 수 있습니다.

코드 분석 실행

프로젝트 속성 대화 상자의 코드 분석 페이지에서 프로젝트를 빌드할 때마다 실행되도록 코드 분석을 구성할 수 있습니다. 수동으로 코드 분석을 실행할 수도 있습니다.

솔루션에 대한 코드 분석을 실행하려면

  • 빌드 메뉴에서 솔루션에서 코드 분석 실행을 선택합니다.

프로젝트에 대한 코드 분석을 실행하려면

  1. 솔루션 탐색기 프로젝트의 이름을 선택합니다.

  2. 빌드 메뉴에서 프로젝트 이름에 대한코드 분석 실행을 선택합니다.

파일에서 코드 분석을 실행하려면 다음을 수행합니다.

  1. 솔루션 탐색기 파일의 이름을 선택합니다.

  2. 빌드 메뉴에서 파일에서 코드 분석 실행을 선택하거나 Ctrl+Shift+Alt+F7을 누릅니.

    프로젝트 또는 솔루션이 컴파일되고 코드 분석이 실행됩니다. 결과는 오류 목록 창에 표시됩니다.

코드 분석 경고를 분석하고 해결합니다.

오류 목록 창에는 찾은 코드 분석 경고가 나열됩니다. 결과는 테이블에 표시됩니다. 특정 경고에 대한 자세한 정보를 사용할 수 있는 경우 첫 번째 열에는 확장 컨트롤이 포함됩니다. 문제에 대한 추가 정보를 보려면 표시를 확장하려면 선택합니다. 가능한 경우 코드 분석에서는 경고를 발생시킨 분석 논리와 줄 번호를 표시합니다.

문제에 대한 가능한 해결 방법을 포함하여 경고에 대한 자세한 내용은 코드 열에서 경고 ID를 선택하여 해당 온라인 도움말 문서를 표시합니다.

경고를 두 번 클릭하여 Visual Studio 코드 편집기에서 경고를 발생시킨 코드 줄로 커서를 이동합니다. 또는 선택한 경고에서 Enter 키를 누릅니다.

문제를 파악한 후 코드에서 해결할 수 있습니다. 그런 다음, 코드 분석을 다시 실행하여 경고가 더 이상 오류 목록에 나타나지 않도록 합니다.

코드 분석 경고에 대한 작업 항목 만들기

작업 항목 추적 기능을 사용하여 Visual Studio에서 버그를 기록할 수 있습니다. 이 기능을 사용하려면 Azure DevOps Server(이전의 Team Foundation Server)의 인스턴스에 연결해야 합니다.

하나 이상의 C/C++ 코드 경고에 대한 작업 항목을 만들려면

  1. 오류 목록에서 경고를 확장하고 선택합니다.

  2. 경고의 바로 가기 메뉴에서 작업 항목 만들기를 선택한 다음 작업 항목 유형을 선택합니다.

  3. Visual Studio에서 선택한 경고에 대한 단일 작업 항목을 만들고 IDE의 문서 창에 작업 항목을 표시합니다.

  4. 추가 정보를 추가한 다음 작업 항목 저장을 선택합니다.

코드 분석 결과 검색 및 필터링

긴 경고 메시지 목록을 검색하고 다중 프로젝트 솔루션에서 경고를 필터링할 수 있습니다.

  • 제목 또는 경고 ID로 경고를 필터링하려면 검색 오류 목록 상자에 키워드(keyword) 입력합니다.

  • 심각도로 경고를 필터링하려면: 기본적으로 코드 분석 메시지에는 경고의 심각도가 할당됩니다. 하나 이상의 메시지의 심각도를 사용자 지정 규칙 집합의 오류할당할 수 있습니다. 오류 목록의 심각도 열에서 드롭다운 화살표를 선택한 다음 필터 아이콘을 선택합니다. 경고 또는 오류를 선택하여 해당 심각도가 할당된 메시지만 표시합니다. 모든 메시지를 표시하려면 [모두 선택]을 선택합니다.

참고 항목