2011-08-19 4 views

답변

2

누군가가 정적 분석 도구를 만들려고 합리적인 것인지 확신 할 수 없습니다. 매우 복잡 할 수 있습니다. 아마도 매우 복잡한 것이고, 전화하지 마라. 예. 클래스에서 작성한 함수이며 호출이 없습니다. 코코아와 상호 작용하는 모든 것들 ... 문제는 서로 다른 환경에서 콜 될 수 있다는 것입니다.

어떤 경우 든 실제로 관심을 가져야 할 것은 런타임 코드 범위입니다.이 방법을 사용하면 실제 사용되는 코드가 표시되므로 작은 하위 집합이됩니다.

+0

동의. 이는 특히 함수 포인터, 콜백 및 무거운 조건부 코드를 도입하기 시작할 때 어려운 문제입니다. 멈추는 문제 같아. – Luke

+0

@ 루케 - 동의했다, 질문은 흥미 롭다 - 그것에 대해 생각하면 이것이 얼마나 어려울지를 깨달았다. 셀렉터와 메시지 포워딩도 사용합니다. 역동적 인 범위에 대한 코드를 계측 - 사소한 것은 아니지만 그렇게 할 수있는 방법을 훨씬 쉽게 이해할 수 있습니다. – iandotkelly

+0

@ iandotkelly : 재미있는 아이디어, 역동적 인 행동. 작은 해킹이 떠오른다. 잠시 동안 프로파일 러를 통해 코드를 실행하고, 모든 함수 이름을 추출하고, TAGS 데이터베이스와 비교한다. 그것은 당신에게 약간의 아이디어를 주어야합니다. 이것은 물론 확률 론적으로 100 % 정확한 것은 아니지만 실제로 호출되는 많은 기능을 검사하지 않아도됩니다. – Arne

2

objc_cover 잠재적으로 사용하지 않는 Objective-C 방법을 찾아내는 데 도움이됩니다.

+0

그건 하나의 파일 만 다루는 것 같습니다. 파일 목록을 포함하는 파일이 있습니까? – David

+0

소스 파일을 제공하지 않으면 컴파일 된 바이너리를주고 * 잠재적으로 사용하지 않는 선택기 목록을 반환합니다. – 0xced

0

WARNING_CFLAGS 목록에 -Wunused-function을 추가하십시오.

또한 주소로 찍은 기능을 참조로 간주합니다 (정상적인 사용에 이상적). 최적의 적용 범위를 위해 gcc와 clang으로 프로그램을 컴파일하십시오.

이 플래그는 모든 경우 (예 : 내 보낸 함수)를 다루지는 않으며 내부적으로 연결된 함수에 주로 초점을 둡니다. stripnm을 사용하여 diffing하면 외부 기호를 분리하는 데 도움이 될 수 있습니다.이 정확한 프로세스를 위해 좋은 도구를 모르겠습니다.

사용하지 않는 objc 메서드를 찾으려면 질문의 단어를 다시 말해야합니다.

관련 문제