문제

함수가 호출되는 위치에서 결정하는 데 사용될 수있는 간단한 도구가 있습니까?

편집하다: Mac OS X (10.6)를 사용하고 있으며 정적 분석을하고 싶습니다.

감사!

도움이 되었습니까?

해결책

어때 CSCOPE? 페이지에서 3rd & 4th Bullet 품목을 확인하십시오.

  • 함수에 의해 호출되는 함수
  • 함수를 호출하는 함수

C ++에서 CSCOPE를 사용한 지 오래되었습니다. C 코드에서는 록-홀드 인 것을 기억하지만 C ++에서는 강하지 않은 것 같습니다.

다른 팁

GTAGS는 태깅을 수행하는 데 사용할 수있는 도구이지만 통화 추적에도 도구입니다.

http://www.gnu.org/software/global/

이것은 C, C ++, YACC, Java 및 PHP4를 지원합니다. 그러나 C ++ 템플릿이나 다른 복잡한 물건을 올바르게 처리 할 수는 없습니다.

이 태깅 파서를 사용하여 콜 트리를 얻기 위해 스크립트를 만들었습니다.
다음과 같은 Bash 완료를 통한 사용자 선택
Google 프로파일 러 코드에 CallTree를 표시합니다.

% global-calltree -x prof_handler Add Evict ProfileData Stop DisableHandler RAW_CHECK WRITE_TO_STDERR
prof_handler:414 => Add:441               |profiler.cc                         |instance_.collector_.Add(depth, stack);
 Add:241 => Evict:290                      |profiledata.cc                      |Evict(*e);
  Evict:61 => ProfileData:75                |profiledata.cc                      |ProfileData::ProfileData()
   ProfileData:124 => Stop:125               |profiledata.cc                      |Stop();
    Stop:261 => DisableHandler:273            |profiler.cc                         |DisableHandler();
     DisableHandler:400 => RAW_CHECK:405       |profiler.cc                         |RAW_CHECK(sigaction(SIGPROF, &sa, NULL) == 0, "sigaction failed");
      RAW_CHECK:83 => WRITE_TO_STDERR:86        |base/logging.h                      |WRITE_TO_STDERR("Check failed: " #condition ": " message "\n",           \
       WRITE_TO_STDERR:59 => DECLARE_int32:65    |base/logging.h                      |DECLARE_int32(verbose);

간단한 도구에 대해 모르지만 무료로 Codeviz (원하는 경우 그래프를 생성하는 대신 원시 덤프를 읽을 수 있습니다). 경고 : 모든 정적 분석 도구에는 가상 호출에 문제가 있으며 템플릿에는 더 나쁩니다.

Mac OS를 사용하기 때문에 그 소리 정적 분석 기능을 갖춘 새로운 컴파일러입니다.

YouTube의 예 :Clang과 함께 버그를 찾습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top