문제

나는 Clang을 사용하여 내가 작업중 인 프로젝트를 프로파일 링하려고합니다. 이 프로젝트에는 Xcode에 종속성으로 포함 된 다소 대형 정적 라이브러리가 포함되어 있습니다.

Clang이 Clang이 실패하게 만드는 것처럼 보이기 때문에 Clang이 종속성 파일을 분석하지 않기를 정말로 원합니다. 이게 가능해? 나는 Clang 문서를 읽고 있었는데 그것을 찾지 못했습니다.

도움이 되었습니까?

해결책 2

따라서 이것은 실제로 답이 아니지만 충분히 잘 작동했습니다.

내가 한 일은 정적 라이브러리를 미리 구축 한 다음 Scan-Build를 사용하여 프로젝트를 구축하는 것이 었습니다. 정적 라이브러리의 최신 빌드가 이미 있었기 때문에 재건되지 않았으므로 스캔되지 않았습니다.

그래도 나는 여전히 이것에 대한 진정한 답을 갖고 싶어합니다.

다른 팁

최후의 수단으로서, 무차별 인력 옵션이 있습니다.

파일의 시작 부분에 이것을 추가하십시오.

// Omit from static analysis.
#ifndef __clang_analyzer__

이것을 끝에 추가하십시오.

#endif // not __clang_analyzer__

그리고 Clang -Analyze는 파일의 내용을 볼 수 없습니다.

참조: 정적 분석기 진단 제어

나는 Xcode를 사용하지 않지만 Linux에서 Scan-Build를 사용하는 것은 다음과 같습니다. 제 경우에는 모든 제 1 자, 비 생성 코드에서 정적 분석을 실행하고 싶습니다. 그러나 Third_Party 코드 및 생성 코드에서 실행되지 않도록하고 싶습니다.

명령 줄에서 Clang-Analyzer는 CC 및 CXX 환경 변수를 CCC-Analyzer 및 C ++-분석기 위치로 설정할 때 빌드에 연결됩니다. 나는 ccc-analyzer.py와 c ++-analyzer.py라는 두 가지 간단한 스크립트를 작성하여 기본 대신 컴파일에 연결했습니다. 이 래퍼 스크립트에서는 컴파일중인 파일의 경로를 간단히 살펴본 다음 원시 컴파일러를 직접 실행하거나 (정적 분석을 피하려는 경우) C*-analyzer (정적 분석이 발생하려면). 내 스크립트는 Python에 있으며 특정 빌드 시스템에 연결되어 있지만 수정이 필요한 예로요.

import subprocess
import sys

def main(argv):
  is_third_party_code = False
  for i in range(len(argv)):
    arg = argv[i]
    if arg == '-c':
      file_to_compile = argv[i + 1]
      if '/third_party/' in file_to_compile or \
            file_to_compile.startswith('gen/'):
        is_third_party_code = True
      break
  if is_third_party_code:
    argv[0] = '/samegoal/bin/clang++'
  else:
    argv[0] = '/samegoal/scan-build/c++-analyzer'
  return subprocess.call(argv)

if __name__ == '__main__':
  sys.exit(main(sys.argv))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top