코드검토 도구 사용법
1. 설치
1.3. License 등록
-
실행 후 도움말 > 라이선스 메뉴 선택후 '편집…' 클릭
-
'노드락' 선택 후 '찾아보기…'에서 '20190807_제이에스솔루션_Node-lock' 폴더의 ci.lic 선택
-
가상머신 날짜는 2019.8.7 로, Ethernet Mac 주소는 C2-CB-38-11-3C-E3 가 되어야 함
2. 프로젝트 추가
2.1. 소스 등록
-
파일 > 새로작성 > '소스 파일 C/C++ 프로젝트' 선택
-
'프로젝트 이름' 입력
-
툴체인 'vs2017' 선택 후 '다음' 클릭
-
'찾아보기..' 클릭하여 소스 폴더 선택
-
왼쪽의 디렉터리에서 소스 폴더 선택
2.2. 컴파일 플래그 설정
-
프로젝트 하위의 'Default Module’에서 오른쪽 마우스 클릭하여 '특성' 선택
-
Default Module 특성 화면에서 '컴파일 플래그' 선택
-
오른쪽 '명령어' 탭에 아래 내용 복사
-
-D_WINDOWS -DNDEBUG -D_UNICODE -DUNICODE -D_AFXDLL -D_DLL
-
-
'모든 하위 소스 파일에 덮어쓰기' 클릭
-
'확인' 버튼 클릭
2.3. Lib Module 생성
-
프로젝트 명 선택 후 오른쪽 마우스 클릭하여 '새로작성' > '모듈' 선택
-
모듈이름을 'Lib Module’로 입력 후 '완료' 클릭
-
Default Module에서 라이브러리 소스 폴더를 Drag & Drop 하여 Lib Module로 옮겨 놓는다.
-
'Lib Module’에서 오른쪽 마우스 클릭하여 '특성' 선택
-
Lib Module 특성 화면에서 '컴파일 플래그' 선택
-
오른쪽 '명령어' 탭에 아래 내용 복사
-
-D_WINDOWS -DNDEBUG -D_USRDLL -D_WINDLL -D_UNICODE -DUNICODE -D_AFXDLL -D_DLL
-
-
'모든 하위 소스 파일에 덮어쓰기' 클릭
-
'확인' 버튼 클릭
3. 코드 검토 수행
3.1. 인스펙션
-
Visual Studio로 빌드시 컴파일 에러가 없는 소스만이 인스펙션이 가능함
-
프로젝트 명 선택 후 오른쪽 마우스 클릭하여 '인스펙션' 선택
-
(정상수행인 경우) 얼마간 수행된 후 '인스펙션 결과' 팝업이 뜨며 '자동 수정 하시겠습니까?' 라고 물어보면 '아니오(N)' 클릭
-
(오류발생인 경우) 아래의 '컴파일 오류' 탭에 분석 실패 파일이 있는지 확인. 오류를 Troubleshooting 참조하여 해결 한 후 인스펙션 재수행
-
'위배상세' 탭에 위배 내용이 표시됨
-
모듈 또는 소스 파일 단위로 팝업메뉴에서 '인스펙션’을 선택할 수 있음
4. 오류 대처 방법 (Troubleshooting)
4.1. 에러 메시지 확인
-
Visual Studio 에서는 에러가 없어도 Code Inspector에서는 컴파일 오류가 발생할 수 있음
-
컴파일 오류가 발생한 소스는 인스펙션이 제대로 수행되지 못한 상태임
-
컴파일 오류 탭에서 파일을 선택하면 오른쪽에 에러 메시지가 표시됨. 표시 내용을 보고 해결해야 함
-
Code Inspector 오류를 해결하기위한 패치는 인스펙션 전용으로만 사용함
4.2. At end of source: error: expected a ")"
-
예시:
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를 확인하세요")); -
원인: C/C++ 문자열에 UTF-8 인코딩 한글이 포함되면 Code Inspector가 제대로 처리 못함
-
조치: 소스파일의 인코딩을 ANSI(EUC-KR)로 바꾸어 인스펙션을 재수행
4.3. error: no instance of function template std::invoke
-
예시:
"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" .... -
원인: thread 실행 코드, 특히 std::thread(&Foo, object); 형식의 문장을 Code Inspector가 처리하지 못함
-
조치:
-
1안) 해당 라인을 주석 처리함
-
2안) 공통헤더(stdafx.h 또는 pch.h) 마지막 부분에 아래 코드를 추가
#include <thread> #define thread(X, Y) thread([]{})
-
4.4. catastrophic error, cannot open source file
-
예시:
"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". -
원인: include 디렉토리 설정이 누락되었음
-
조치: 컴파일 플래그 설정 방법의 -D 옵션을 추가하는 방식으로 -I 옵션으로 디렉토리를 추가