코드검토 도구 사용법

1. 설치

1.1. Code Inspector 3.6 설치

  • 설치파일\Code Inspector3.7rev8 폴더에서 setup을 실행하여 설치

1.2. 패치 설치

  • 설치파일\Code Inspector3.7rev8\패치 폴더에서 Code Inspector-3.7.8-V10 실행

1.3. License 등록

  1. 실행 후 도움말 > 라이선스 메뉴 선택후 '편집…​' 클릭

  2. '노드락' 선택 후 '찾아보기…​'에서 '20190807_제이에스솔루션_Node-lock' 폴더의 ci.lic 선택

  3. 가상머신 날짜는 2019.8.7 로, Ethernet Mac 주소는 C2-CB-38-11-3C-E3 가 되어야 함

1.4. NUREG Ruleset 등록

  1. 파일 > 가져오기 > Code Inspector > '규칙모음 형식으로 가져오기' 선택 후 '다음' 클릭

  2. 열기 클릭 후 ruleset\Ruleset_NUREG-subset_20250403.rs 선택 후 '열기' 클릭

  3. '전체선택' 클릭 후 '완료' 클릭

1.5. Tool Chain 등록

  1. 파일 > 가져오기 > 환경설정 > 툴체인 선택 후 '다음' 클릭

  2. 찾아보기 클릭 후 toolchain\vs2017-x64_tool-chain.tch 선택 후 '열기' 클릭

  3. '모두 선택' 클릭 후 '다음' 클릭, 한 번 더 '다음' 클릭 후 '완료' 클릭

2. 프로젝트 추가

2.1. 소스 등록

  1. 파일 > 새로작성 > '소스 파일 C/C++ 프로젝트' 선택

  2. '프로젝트 이름' 입력

  3. 툴체인 'vs2017' 선택 후 '다음' 클릭

  4. '찾아보기..' 클릭하여 소스 폴더 선택

  5. 왼쪽의 디렉터리에서 소스 폴더 선택

2.2. 컴파일 플래그 설정

  1. 프로젝트 하위의 'Default Module’에서 오른쪽 마우스 클릭하여 '특성' 선택

  2. Default Module 특성 화면에서 '컴파일 플래그' 선택

  3. 오른쪽 '명령어' 탭에 아래 내용 복사

    • -D_WINDOWS -DNDEBUG -D_UNICODE -DUNICODE -D_AFXDLL -D_DLL

  4. '모든 하위 소스 파일에 덮어쓰기' 클릭

  5. '확인' 버튼 클릭

2.3. Lib Module 생성

  1. 프로젝트 명 선택 후 오른쪽 마우스 클릭하여 '새로작성' > '모듈' 선택

  2. 모듈이름을 'Lib Module’로 입력 후 '완료' 클릭

  3. Default Module에서 라이브러리 소스 폴더를 Drag & Drop 하여 Lib Module로 옮겨 놓는다.

  4. 'Lib Module’에서 오른쪽 마우스 클릭하여 '특성' 선택

  5. Lib Module 특성 화면에서 '컴파일 플래그' 선택

  6. 오른쪽 '명령어' 탭에 아래 내용 복사

    • -D_WINDOWS -DNDEBUG -D_USRDLL -D_WINDLL -D_UNICODE -DUNICODE -D_AFXDLL -D_DLL

  7. '모든 하위 소스 파일에 덮어쓰기' 클릭

  8. '확인' 버튼 클릭

3. 코드 검토 수행

3.1. 인스펙션

  1. Visual Studio로 빌드시 컴파일 에러가 없는 소스만이 인스펙션이 가능함

  2. 프로젝트 명 선택 후 오른쪽 마우스 클릭하여 '인스펙션' 선택

  3. (정상수행인 경우) 얼마간 수행된 후 '인스펙션 결과' 팝업이 뜨며 '자동 수정 하시겠습니까?' 라고 물어보면 '아니오(N)' 클릭

  4. (오류발생인 경우) 아래의 '컴파일 오류' 탭에 분석 실패 파일이 있는지 확인. 오류를 Troubleshooting 참조하여 해결 한 후 인스펙션 재수행

  5. '위배상세' 탭에 위배 내용이 표시됨

  6. 모듈 또는 소스 파일 단위로 팝업메뉴에서 '인스펙션’을 선택할 수 있음

3.2. 결과 파일 출력

  1. 프로젝트 명 선택 후 오른쪽 마우스 클릭하여 '내보내기' 선택

  2. Code Inspector > '위배 상세 보고서' 선택 후 '다음' 클릭

  3. 프로젝트 명 선택 후 '다음' 클릭

  4. 상단의 위치 지정 후 보고서 형식으로 'HTML’과 'XLS' 선택

  5. '완료' 클릭 후 표시되는 팝업에서 '디렉토리 열기' 클릭

  6. 'violations.xls' 와 'violations.html' 이 결과 파일임

3.3. 인스펙션 재수행

  • 소스 파일을 덮어쓰기 한 후 소스 파일 단위 또는 모듈, 프로젝트 단위로 인스펙션을 수행

4. 오류 대처 방법 (Troubleshooting)

4.1. 에러 메시지 확인

  1. Visual Studio 에서는 에러가 없어도 Code Inspector에서는 컴파일 오류가 발생할 수 있음

  2. 컴파일 오류가 발생한 소스는 인스펙션이 제대로 수행되지 못한 상태임

  3. 컴파일 오류 탭에서 파일을 선택하면 오른쪽에 에러 메시지가 표시됨. 표시 내용을 보고 해결해야 함

  4. Code Inspector 오류를 해결하기위한 패치는 인스펙션 전용으로만 사용함

4.2. At end of source: error: expected a ")"

  1. 예시:

    At end of source: error: expected a ")"
    
    
    
    "C:\Work\SUN34_GWDLS\Src\GW\SCSendS\SCSendSDlg.cpp", line 232: error:
    
              improperly terminated macro invocation
    
      		AfxMessageBox(_T("Status Size를 확인하세요"));
  2. 원인: C/C++ 문자열에 UTF-8 인코딩 한글이 포함되면 Code Inspector가 제대로 처리 못함

  3. 조치: 소스파일의 인코딩을 ANSI(EUC-KR)로 바꾸어 인스펙션을 재수행

4.3. error: no instance of function template std::invoke

  1. 예시:

    "C:\Program Files\Microsoft Visual
    
              Studio\2022\Community\VC\Tools\MSVC\14.16.27023\include\thr/xthread",
    
              line 238: error: no instance of function template "std::invoke"
    		  ....
  2. 원인: thread 실행 코드, 특히 std::thread(&Foo, object); 형식의 문장을 Code Inspector가 처리하지 못함

  3. 조치:

    • 1안) 해당 라인을 주석 처리함

    • 2안) 공통헤더(stdafx.h 또는 pch.h) 마지막 부분에 아래 코드를 추가

      				#include <thread>
      				#define thread(X, Y) thread([]{})

4.4. catastrophic error, cannot open source file

  1. 예시:

    "C:\Work\SUN34_GWDLS\Src\GW\SCSendS\SCSendSDlg.h", line 33: catastrophic error:
    
              cannot open source file "common/IPSSocket.h"
    
      #include "common/IPSSocket.h"
    
                                   ^
    
    
    
    1 catastrophic error detected in the compilation of "C:\Work\SUN34_GWDLS\Src\GW\SCSendS\SCSendSDlg.cpp".
    
    Compilation terminated.
    
    1 catastrophic error detected in the compilation of "C:\Work\SUN34_GWDLS\Src\GW\SCSendS\SCSendSDlg.cpp".
  2. 원인: include 디렉토리 설정이 누락되었음

  3. 조치: 컴파일 플래그 설정 방법의 -D 옵션을 추가하는 방식으로 -I 옵션으로 디렉토리를 추가

4.5. resource.h line 1: error: unrecognized

  1. 예시:

    "C:\Work\SUN34_GWDLS\Src\GW\SCSendS\resource.h", line 1: error: unrecognized
    
              token
  2. 원인: resource.h의 인코딩(UTF-16 LE BOM)을 Code Inspector가 인식 못함

  3. 조치: resource.h 파일의 인코딩을 ANSI(EUC-KR)로 바꾸어 인스펙션을 재수행

4.6. Ruleset 변경

  1. '프로젝트 이름’에서 오른쪽 마우스 클릭하여 '특성' 선택

  2. '프로젝트 이름' 특성 화면에서 'Code Inspector' 확장 후 '규칙' 선택

  3. 규칙 이름중에서 'NUREG_CR_6463' 만 선택하고 나머지는 선택해제

  4. 하단의 '전역 규칙 허용' 선택 후 '확인' 클릭