문제

Visual Studio 2008에 따라 컴파일 된 대규모 레거시 C ++ 프로젝트가 있습니다. 어느 곳에서나 액세스 할 수없는 합리적인 양의 '죽은'코드 (사용되지 않은 전체 클래스)가 있다는 것을 알고 있습니다.

나는 이것을 식별 할 도구를 찾고 있습니다. 정적 분석.

이 질문: 레거시 C/C ++ 프로젝트의 죽은 코드 감지 코드 커버리지 도구를 사용하는 것이 좋습니다. 테스트 범위가 충분히 높지 않기 때문에 이것은 옵션이 아닙니다.

또한 -wunreachable 코드를 언급합니다. GCC 옵션. Visual Studio와 비슷한 것을 원합니다. 우리는 이미 링커 /opt : ref 옵션을 사용하여 중복 코드를 제거하지만, 이는 유용한 수준으로 죽은 코드를보고하지 않습니다 ( /장면에서 사용되는 경우 라이브러리에서 많은 줄을 포함하여 10 만 개가 넘는 줄이 있습니다).

Visual Studio 프로젝트와 잘 어울리는 더 나은 옵션이 있습니까?

도움이 되었습니까?

해결책

QA-C ++ 라인을 따라 무언가를 원할 것입니다 (http://www.programmingresearch.com/qacpp_main.html), 또한 참조하십시오 http://en.wikipedia.org/wiki/list_of_tools_for_static_code_analysis 유사한 제품의 경우.

도달 할 수없는 코드를 감지하는 정적 코드 분석 도구를 찾고 있습니다. 많은 코딩 가이드 라인 (예 : 실수하지 않은 경우 MISRA-C ++와 같은)에는 도달 할 수없는 코드가 없어야합니다. 이러한 가이드 라인을 시행하기 위해 특별히 준비된 분석 도구가 최선의 방법입니다.

그리고 당신은이 도구의 다른 용도도 찾을 수 있기를 원합니다.

다른 팁

나는 Gimpel의 보풀 제품 (PC 린트 그리고 Flexelint)는 도달 할 수없는 코드와 사용하지 않거나 참조되지 않은 모듈을 식별합니다.

둘 다 정적 분석 도구 범주에 속합니다.

나는 단지 만족스러운 장기 고객 일 뿐이며, 김프와 제휴가 없다.

나는 Visual C를 모르고 -wunreachable 코드 특정 커버리지 도구를 추천했습니다. 귀하의 상황에 대한 해결책으로 다음을 시도합니다.

  1. CTAGS (또는 유사한 프로그램)로 소스의 모든 기호 목록으로 만듭니다.
  2. 컴파일러에서 Dead Code 제거를 활성화합니다 (기본값이 켜져 있다고 가정합니다).
  3. 전체 프로그램/링크 시간 최적화를 활성화합니다 (따라서 그는 다른 외부에서 사용되지 않는 기능이 필요하지 않으며 버려지는 것을 알고 있습니다).
  4. 이진에서 기호를 가져 와서 1의 기호와 비교하십시오.

또 다른 접근법은 일부 호출 그래프 생성 도구 (예 : 독사시) 일 수 있습니다.

몇 가지 접근 방식을 사용하는 것이 좋습니다. 1. GCC에는 유용한 편집 플래그가 있습니다.

-Wunused-function
-Wunused-label
-Wunused-value
-Wunused-variable
-Wunused-parameter
-Wunused-but-set-parameter

2. CPPCheck에는 다음과 같은 유용한 기능이 있습니다.

 --enable=unusedFunction

3. 이전에 제안 된대로 정적 분석기를 사용하십시오.

Delphi와 함께 저에게 적합한 한 가지 방법은 디버깅을 활성화하고 디버거 아래에서 프로그램을 실행하는 것입니다.

Delphi 프로그램이 디버거 아래에서 실행되면 IDE는 마진에서 어떤 코드 라인을 중단 점으로 설정할 수 있는지 표시합니다. 진정으로 죽은 코드 - 즉 링커/컴파일러에 의해 제거되었습니다. 브레이크 포인트를 설정할 수 없기 때문에 분명합니다.

주석가들이 이것을 오해하는 것처럼 보이면서 몇 가지 추가 메모.

A : 각 줄에서 중단 점을 설정할 필요가 없습니다. IDE에서 소스 파일을 열고 빠르게 스크롤하십시오. 죽은 코드는 쉽게 발견됩니다.

B : 이것은 '코드 커버리지'점검이 아닙니다. 라인에 도달하는지 확인하기 위해 응용 프로그램을 실행할 필요가 없습니다.

C : 나는 충분히 익숙하지 않아 vs2008 이므로이 제안이 효과가 있는지 말할 수 없습니다.

어느 하나
1) MSVC는 제작 된 저조한 사용 정적 분석 도구.
2) MSVC 시장 대부분의 무료 도구에 대한 지원을 포함한 많은 도구가 있습니다. CPPCHECK

Market Place 응용 프로그램을위한 최신 버전의 Visual Studio가 필요하지만 무료입니다. "커뮤니티 에디션"매우 관대 한 라이센스가 있습니다.

소스 코드에서 함수를 무작위로 삭제하는 스크립트를 작성하고 모든 것을 처음부터 다시 컴파일하는 스크립트를 작성하십시오. 여전히 컴파일 된 경우 - 해당 기능은 데드 코드였습니다.

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