2009-12-19 4 views
14

C++ 코드에 태그를 지정하고 검색하는 고품질의 방법에 대한 제안. 대부분의 항목에 대해 cscope/ctags를 사용하지만 지나치게 복잡한 C++ 코드를 사용하기에는 부족합니다. vim에서 Slickedit으로 전환하기 시작했는데 (아직 완전하지는 않지만 더 좋음) 코드를 찾아 보았지만 vim 만 돌아가고 싶습니다.C++ 소스 태그 지정

내가 원했던 것은 클래스 멤버의 범위를 이해할 수있는 무언가였습니다. 예를 들어 같은 멤버 이름이 다른 클래스에 존재하는 클래스 멤버 (및 가능한 C++ 코드)에 대한 참조를 검색하는 경우, 그것은 단지 나에게 관련 참조를 줄 것이다.

나는 이미 vim과 잘 어울리는 것을 선호하지만, 오픈 소스 패키지와 같이 자신 만의 플러그인을 만들 수도 있습니다.

의견을 보내 주셔서 감사합니다.

+0

나는 동일한 문제를 ctags : ': tags NamespaceName :: ClassName :: methodName' 명령을 사용하여 모두 ok이지만, 메서드 이름 위에 커서를 놓고'CTRL + '을 입력하면 오류가 발생합니다. , 나는'g + '를 사용하여 올바른 일치를 선택할 수있는 것보다 태그 목록을 보여 준다는 것을 발견했다. 나에게 가장 좋은 것은 현재 코드를 분석하고': tag'를 올바르게 호출하는 스크립트입니다. –

답변

0

저는이 경험이 없지만 Doxygen을 사용하여 복잡한 프로젝트의 소스 코드를 찾아 보았습니다. 모든 설정을 켜고 실행하면 호출 그래프, 호출 수신자 그래프, 참조 및 참조 관계, 템플릿 인스턴스화 등이 생성됩니다. 출력 형식에는 HTML, LaTeX, CHM, POD가 포함됩니다.

희망이 있습니다.

9

doxygen 코드를 탐색하고 클래스와 구성원 관계를 서로 비교하는 훌륭한 도구입니다. 이 도구는 각 사용법에 대한 참조가있는 소스 코드에 대한 클릭 가능한 HTML 출력을 생성합니다. 검색 가능한 chm 파일로 컴파일하거나 웹 서버를 사용하여 키워드 코드를 검색 할 수 있습니다.

0

잠시 동안 나는이 목적을 위해 다른 도구를 혼합했습니다. Vi는 위대한 편집자이며 번거 로움없이 원격 컴퓨터에서 실행할 수 있지만 완료 정보는 의미 론적이지 않습니다.

큰 문제에 직면했을 때 Eclipse CDT 또는 QTCreator 중 하나를 사용하는 경향이 있습니다. 두 경우 모두 최신 버전 인 1 년 전의 버전은별로 좋지 않습니다. QTCreator는 가벼운 툴이지만 코드 분석 능력에 깊은 인상을 받았습니다. 이클립스 CDT는 더 무거웠지만 인터페이스에 좀 익숙해 져서 결국에는 사용하는 경향이있다.

내가 연구하고있는 프로젝트는 분리 된 샌드 박스 내에서 컴파일됩니다. 두 IDE 중 아무 것도 사용할 수 없지만 분석을 위해 저장소의 사본을 얻고 IDE를 탐색 도구로 사용할 수 있습니다.

25

올바른 옵션을 사용하여 태그를 지정하셨습니까? C++를 들어, 내가 사용

는 C++ 멤버 함수 정의를 구문 분석 (예 : "클래스 명 :: 기능"

ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

이 문서는 --c++-kinds=+p 옵션에 대해 말해야하는 것입니다), ctags는 범위 지정자 이 클래스 이름인지 또는 네임 스페이스 지정자인지 여부를 판별 할 수 없으며 항상 확장 필드의 범위 부분에 클래스 이름 으로 나열합니다. 또한 C++ 함수가 클래스 선언 (일반적 경우) 외부에서 정의 된 경우 선언에 포함 된 액세스 사양 (public, protected 또는 private) 및 구현 정보 (예 : 가상, 순수 가상)가 정의됩니다. 태그가 함수 정의에 대해 생성 될 때 알 수 없습니다.그러나 프로토 타입 (예 : --C++ - 종류 = + p)
에 사용할 수 있습니다.

--fields=+iaS 옵션 :

a Access (or export) of class members 
i Inheritance information 
S Signature of routine (e.g. prototype or parameter list) 

--extra=+q 옵션 :

때문에, 기본적으로 소스 파일에있는 별도의 식별자에 대한 태그를 생성 만 ctags를. --extra = + q 옵션을 지정하면 ctags는 C++의 경우 class :: member 양식의 각 클래스 멤버 (데이터 및 함수/메소드)에 대해 클래스 012. 에펠과 자바를위한 class.method.

--language-force=C++ 옵션 : 기본적으로

가 자동으로 그 언어를 판별 할 수 없습니다 해당 파일을 무시하고, 소스 파일의 언어를 선택 ctags를 (위의 소스 파일을 참조). 이 옵션은 확장자에 따라 자동으로 언어를 선택하는 대신 지정된 언어 (대소 문자를 구분하지 않음, 기본 제공 또는 사용자 정의)를 제공된 모든 파일에 사용하도록합니다. 또한 특수 값 auto는 언어가 자동으로 선택되어야 함을 나타냅니다 (이 옵션을 효과적으로 비활성화 함).

+1

요즘은 C++을 많이 사용하지만 수년간 저의 오래된 ctags 명령 행을 사용하고 있습니다. 내가 맨 페이지를 읽고 C++에 대한 옵션을 더 추가 할 필요가 있는지 생각한 적이 없다고 생각합니다. 매우 도움이됩니다. – Dan

1

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

그것은 탐색 생성 할 수있는 글로벌 GNU보십시오 : 소스 코드의 수 웹 페이지뿐만 아니라 정력 종종 유용한 명령 줄 인터페이스를 가지고 지원.