문제

어떻게 갈 것에 대해 코드에서 검색 C/C++코드?나는 꽤 큰 코드 베이스로 작업하고 적어도 10~15%은 죽은 코드입니다.어떤 유닉스기반 도구를 식별하는 이 지역입니까?몇 조각의 코드는 여전히 많이 사용하는 전처리기할 수 있는 자동화된 프로세스 처리는?

도움이 되었습니까?

해결책

당신이 사용할 수 있는 코드 범위에 대한 분석 도구 이며 찾기 위해 사용되지 않는 장소에서 당신의 코드입니다.

인기 있는 도구에 대한 gcc 툴체인은 gcov 와 함께,그래픽 프론트 엔드 lcov(http://ltp.sourceforge.net/coverage/lcov.php).

는 경우 사용할 gcc 컴파일할 수 있습으로 gcov 지원을 통해 활성화'--적용'플래그입니다.다음에,응용 프로그램을 실행 또는 실행하는 테스트 스위트 이 gcov 사용니다.

기본적으로 gcc 를 방출한다는 몇 가지 추가하는 동안 파일을 컴파일하고 응용 프로그램 일부를 방출 검사 데이터를 실행하는 동안.당신은 모든 이들(.gcdo 다.gcda 파일).나는 전체 세부 사항에 여기에,하지만 당신은 아마 설정해야 할 두 가지는 환경변수를 수집하는 범위에서 데이터 온전한 방법:GCOV_PREFIX 및 GCOV_PREFIX_STRIP...

실행 한 후,당신이 할 수 있는 모든 검사 데이터로 함께하고 그것을 실행을 통해 lcov toolsuite.병합의 모든 범위에서 파일을 다른 테스트 실행은 또한,가능한 조금이라도 참여했다.

어쨌든,당신은 결국 좋은 설정 웹페이지의 일부를 보여주는 정보 보호 정책을 참조하시기 바리 조각의 코드가 없는 범위와 따라서,었을 사용하지 않습니다.

물론,필요하신 더블 확인하는 경우에는 부분의 코드를 사용하지 않는 어떤 상황에서는 많은 방법에 따라 달라집 좋은 테스트를 행사 코드 베이스입니다.하지만 적어도,이에 대한 아이디어 가능 죽은 코드가 후보들...

다른 팁

컴파일에서 gcc 로-Wunreachable-코드입니다.

내가 생각하는 최신 버전은,더 나은 결과를 얻을 것이다,그러나 내가 잘못 될 수 있습니다 내가 있다는 인상을 무언가들이 적극적으로 작동한다.참고가는 흐름 분석,그러나 나는 그것을 믿지 않을 알려주는"코드는"이미 죽은 시간으로 떠나는 전처리기 때문에 결코 구문 분석합니다.그것은 또한 검색하지 않습니다 예를 들면내보내는 기능이 결코 불리거나,특별한 경우 처리 코드는 그냥 그래서 될 일이 불가능하기 때문에 아무것도 함수를 호출하는 매개변수를 필요한 코드 범위에 대한(및 실행 기능적 테스트 아닌 단위 테스트를 확인할 수 있습니다단위 테스트 100%코드 검사,따라서 코드를 실행하는 경로로는'죽은'멀리로 응용 프로그램 관련).그럼에도 불구하고,이러한 제한 마음에 그것을 얻을 수있는 쉬운 방법을 찾기 시작했 가장 완전히 bollixed 루틴 코드에 기초입니다.

이 인증서 권고 목록을 다른 도구를 정적 죽은 코드 검색

귀하의 접근 방식에 따라 달라집 availability(자동)테스트합니다.이 있는 경우 테스트를 신뢰를 커버하기에 충분한 양의 기능을 사용할 수 있습니다 보장 분석으로 이전 답변이 이미 권장합니다.

하지 않은 경우 행운이 당신 모드로 설정할 수 있습니다 소스 코드를 분석 도구 SciTools'이해 당신을 도울 수 있는 분석을 사용하는 코드는 많은 내장의 분석 보고서입니다.내 경험과 함께하는 도구는 날부터 2 년 전,그래서 그는 할 수 없다 자세히지만,무엇을 기억하는 그들이 했다는 인상적인 지원과 함께 매우 빠른 처리 시간의 버그 수정 사항 및 질문에 대한 답변.

내가 찾는 페이지 정적 소스 코드 분석 을 나열하는 많은 다른 도구뿐만 아니라.

지 않는 경우는 데 도움 당신이 충분히 하나,그리고 당신은 특별히 관심이 찾는 전처리기는 관련 코드,나는 것이 좋습니다 당신이트에 대한 자세한 정보 코드입니다.는 경우,예를 들어,그것은 대부분 관련된 다양한 조합의#ifdef 설정할 수 있는 스크립트를 작성 결정(의 조합)설정을 찾을 조합이 실제로 내장,등등.

g++4.01-Wunreachable-코드에 대해 경고하는 코드로 연결할 수 없는 함수 안에,하지만 경고하지 않지에 대해 사용되지 않는 기능입니다.

int foo() { 
    return 21; // point a
}

int bar() {
  int a = 7;
  return a;
  a += 9;  // point b
  return a;
}

int main(int, char **) {
    return bar();
}

g++4.01 에 대한 경고를 발점 b,하지만 아무 말도에 대한 foo()(점)더라도 그것은 도달할 수 없는 이 파일에서.이 행동은 올바른지만 실망하기 때문에,컴파일러 알 수 없는 함수 foo()선언되지 않 외부에서 일부는 다른 편집 단위에서 호출이 있;만을 링커는지 확인해 볼 수 있다.

C 만 코드고 가정하고 소스 코드의 전체 프로젝트 가능,실행하는 분석과 함께 오픈소스 도구 Frama-C.문의 프로그램에 빨간색 GUI 죽은 코드입니다.

는 경우 당신은"죽은"코드를 문제가 당신은 또한에 관심이있을 수 있습니다 을 제거하"여가 코드는"코드는 실행되지 않는 에 기여한 최종 결과입니다.이에 당신을 필요를 제공하는 는 정확하게 모델링의 I/O 기능을(당신이 원하지 않을 것 을 제거하는 계산이 나타납"예"그러 으로 사용되는 인수 printf).Frama-C 옵션은 포트에 대한 예비 품목 코드입니다.

모두 Mozilla오픈 사무실 홈-성장하는 솔루션입니다.

죽은 코드 분석이 필요한 글로벌 분석을 당신의 전체 프로젝트입니다.당신이 얻을 수없는 이 정보를 분석하여 번역 단위별(잘 감지할 수 있습니다 죽은 엔터티를하면 그들 내에 완전히 단 한 번역 단위이지만,나는 생각하지 않는 당신이 정말로 무엇을 찾고).

우리는 우리의 DMS 소프트웨어 재 설계 툴킷을 정확하게 구현에 대해 이 자바 코드,구문 분석하는 모든 컴파일을-단위에서 관여되면,건물 기호 테이블에 대한 모든 것을 쫓는 모든 참조가 있습니다.최고 수준의 정의 참조가 없고 아무런 주장되는 외부 API 항목은 죽었습니다.또한 이 도구는 자동으로 스트립으로 죽은 코드,그리고 결국 당신이 원하는 선택할 수 있습니다:보고서 죽은 사람의 기관,또 코드 박탈습니다.

DMS 또한 구문 분석하는 C++에서는 다양한 방언(편집 Feb2014: 등 MS 고 GCC 버전의 C++14[편집 Nov2017:지금 C++17] 고)구축에 필요한 모든 기호 테이블이 있습니다.추적 죽음을 참조 할 것 간단에서는 점이다.DMS 하는 데 사용될 수도 있습립니다.보 http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

땡기 검사 도구는 도움이 될 것이다.그것은 무료로하지만.

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