2012-07-19 4 views
4

완전한 소스 코드 패키지를 파싱하고 모든 함수/메서드를 별도의 조각으로 추출하는 데 사용할 수있는 도구 목록을 작성하려고합니다. 필자의 목표는 도구 나 스크립트를 실행하고 패키지에있는 함수의 수를 즉시 파악하고 필요에 따라 세그먼트 화 된 함수 전체를 한 번에 하나씩 쉽게 검사하는 것입니다.소스 코드 프로젝트에서 모든 함수를 추출하는 도구

지금은 TXL (트리 변형 언어)으로 작성된 추출 스크립트가 포함 된 NiCad 복제 감지 도구를 사용하고 있습니다. 각 함수는 XML 문서에서 고유 한 엔티티로 추출되어 저장되므로 함수 목록을 처리하는 것이 매우 편리합니다. NiCad에는 C, Java 및 Python 용 추출 도구가 포함되어 있습니다. 나는 주로 C에 관심이 있지만, 나머지는 사용할 수있게되어 좋다. 아직 C++ 파서를 설치하지 않았기 때문에 편리합니다.

또한 콜 그래프를 식별하는 보너스가 추가 된 Doxygen을 사용했습니다. 이러한 파일에는 많은 마크 업이 있지만, Doxygen의 출력을 구문 분석하여 일반 함수 목록으로 가져 오는 데는 약간의 추가 작업이 필요합니다.

누구나 함수/메소드의 전체 집합을 추출하는 도구를 사용 했습니까? 권장 사항이나 경고가 있습니까? 만약 당신이 직접 작성했다면 어딘가에서 사용할 수 있습니까?

감사합니다.

+4

무엇을 실행에 위의 프로그램의

void fun1() { return; } void fun() { fun1(); } int main() { fun(); return 0; } 

NM? –

+2

'libclang'은 어떨까요? – 0xC0000022L

+0

필자의 겸허 한 견해로는 잘 작성된 C 또는 C++ 코드베이스에서 헤더 파일을 검토하여 프로젝트가 어떻게 작동하는지에 대한 기타 모든 관련 정보를 볼 수 있어야합니다. – Wug

답변

0

리눅스의 nm 도구를 사용할 수 있습니다. "nm은 객체 파일의 심볼을 나열하는 데 사용됩니다." 자세한 내용을 보려면 nm 매뉴얼 페이지를 참조하십시오. 샘플 nm은 참조를 위해 여기에 복사됩니다. "| 그렙 T 나노 미터의 a.out"Doxygen을 약

08048470 T __libc_csu_fini 
08048400 T __libc_csu_init 
080484ac T _fini 
080482b8 T _init 
08048320 T _start 
080483d9 T fun 
080483d4 T fun1 
080483e3 T main 
+0

죄송합니다. 문제의 해결 방법이 아닌 것 같습니다. 나는 기본 상징 이상을 원한다. – swrittenb

관련 문제