다음을 통해 공유


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

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

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

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

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

  3. 선택한 구성을 사용하여 프로젝트가 빌드될 때마다 코드 분석을 실행하려면, 빌드에 Code Analysis 사용 확인란을 선택합니다. 분석 메뉴를 열고 ProjectName에 대한 Code Analysis 실행 또는 파일에 대한 Code Analysis 실행을 선택함으로써 코드 분석을 수동으로도 실행할 수 있습니다.

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

표준 C/C++ 규칙 집합

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

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

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

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

모든 규칙을 포함하려면 다음을 적용합니다.

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

코드 분석 실행

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

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

  • 빌드 메뉴에서 솔루션에 대한 Code Analysis 실행을 선택합니다.

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

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

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

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

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

  2. 빌드 메뉴에서 파일에 대한 Code Analysis 실행을 선택하거나 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별로 경고를 필터링하려는 경우: 오류 목록 검색 상자에 키워드를 입력합니다.

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

참고 항목