ctags 알아보기
출처 : http://sungto.tistory.com/trackback/34
------------------------------------------------------------------------------------------------------------------------------------------------------
== 간단한 ctags 명령어 목록 ==
:ta [name] :: name과 일치하는 태그 위치로 이동
ctrl + ] :: 커서가 위치하고 있는 함수나 구조체의 정의로 이동
ctrl + t :: 이전 위치로 돌아오기
:ts [name] :: name과 일치하는 태그 목록 출력
:ta /[name]:: name과 일치하는 태그 목록 출력
:tj [name] :: 목록이 한개인 경우 이동, 여러개인 경우 목록 출력
:tn :: 다음 태그로 이동 (tag next)
:tp :: 이전 태그로 이동 (tag previous)
:tags :: 이동한 태그 히스토리 목록 출력
------------------------------------------------------------------------------------------------------------------------------------------------------
본문 내용
------------------------------------------------------------------------------------------------------------------------------------------------------
Linux에서 Source 분석을 할 때 사용 되어 지는 Ctags에 대해서 설명 하고자 한다.
1.Ctags정의
우선 Ctags는 프로그래밍 소스 코드의 태그 (전역변수 선언, 함수 정의, 매크로 선언)들의 데이터 베이스
(tags파일) 를 생성하는 유닉스 명령어다. 이후 생성된 태그 데이터베이스는 vim이나 emacs같은 에디터
에서 특정 심벌을 찾고자 할 때 이용될 수 있는 것이 Ctags이다.
2.Ctags 설정
Step1.
Ctags패키지 설치 유무를 확인 한다. 확인 법은 터미널 상에서 $ctags –help를 통해 확인 가능 하며
설치 되어 있지 않을 경우 따로 설치가 필요 하다.
(※.요즘 제공 되는 Linux 배포판은 기본적으로 포함 되어있기 때문에 따로 설치 방법은 언급 하지 않는다.)
Step2.
분석할 Source가 있는 디렉터리로 이동 후 터미널 상에 ctags -R이라고 명령어를 입력 하여 tags 파일
을 생성 한다. (※.ctags명령어 사용된 옵션 인 –R은 하위 디렉토리 소스 까지 tag들을 만들라는 옵션 임)
Step3.
Tags파일이 제대로 생성 되었는지 확인 하기 위하여 터미널 상에 find tags라고 입력 하였을 때 아래와
같이 tags가 찾아 지면 정상 적으로 tags 파일이 생성 되어 진 것이다.
Step4. 현재 생성 되어진 tags파일은 tags 파일이 있는 디렉토리에서 Source를 열었을 때 밖에 적용 되지
않기 때문에 불편한 점이 많다. 즉, 현재 tags가 있는 디렉토리 외에 다른 디렉토리에서 실행 하면 적용
되지 않는 다는 것이다. 이를 극복 하기 위하여 vimrc파일에 tags 파일을 등록 하여 모든 디렉토리에서
사용 가능 하도록 하자. 방법은 아래와 같다.
(※.대부분 vimrc 파일은 /etc 디렉토리 아래 있으며, 사용자 계정에 따라 자신 홈디렉토리에 위치 함)
vimrc 파일을 열어 아래와 같이 맨 밑줄에 추가 시켜 준다.
(※.추가 하는 내용은 "set tags +=tags파일 위치/tags"를 추가 시켜 주며, 필자는 tags의 파일 위치가
/opt/FriendlyARM/mini2440/linux-2.6.32.2/tags 파일이 위치 했기 때문에 아래와 같이 추가 한 것이며,
+=는 기존의 tags 파일이 있음 다음의 tags 파일을 추가 하겠다는 의미 이다.)
Step5. 원하는 Source파일을 오픈 한 후 사용 하면 끝이다.
3.Ctags 사용 명령어
분석을 원하는 Source파일을 Vim으로 Open합니다. 예를 들어 설명 하면 아래 처럼
mm_struct가 어떻게 정의되어있는지 궁금하다면, 커서를 mm_struct로 이동한후
ctrl + ] (== ^]) 를 입력하면, tags 파일에서 해당 태그 정보를 찾아
해당 파일로 이동합니다.
뒤로 갈때는 ctrl + t (==^T) 를 입력하면 됩니다.
명령모드에서 태그로 이동하고 싶다면,
:ta task_struct (== :tag task_struct)
ta는 태그db 에서 첫 번째로 검색된 결과로 이동하기 때문에,
원하는 것과 다른 결과를 얻을 수 있습니다.
두번쨰 검색 결과로 갈때는
:tn ("tn는 tag next 의미")로 다음 검색 결과로 이동하고,
:tp ("tp는 tag previous ")로 다시 돌아갈 수 있습니다.
:ta [name] 명령어 대신에 :ts [name] 를 이용한다면, (ts는 " tag select ")
원하는 검색 결과를 한눈에 보고, 결과들 중 원하는 것을 선택할 수 있게 됩니다.
==== :ts schedule 입력시 모습 ====
==== :ts schedule 입력시 모습 ====
CPU 시간을 프로세스에게 할당하는 schedule을 관리하는 함수
schedule()는 4번임을 목록으로 확인할 수 있습니다.
4를 입력하고 Enter 를 치면, schedule()로 이동합니다..
== 간단한 ctags 명령어 목록 ==
:ta [name] :: name과 일치하는 태그 위치로 이동
ctrl + ] :: 커서가 위치하고 있는 함수나 구조체의 정의로 이동
ctrl + t :: 이전 위치로 돌아오기
:ts [name] :: name과 일치하는 태그 목록 출력
:ta /[name]:: name과 일치하는 태그 목록 출력
:tj [name] :: 목록이 한개인 경우 이동, 여러개인 경우 목록 출력
:tn :: 다음 태그로 이동 (tag next)
:tp :: 이전 태그로 이동 (tag previous)
:tags :: 이동한 태그 히스토리 목록 출력
이상으로 Ctags 사용법을 마치 도록 하겠습니다.
'소프트웨어' 카테고리의 다른 글
[c++/c] linux환경, 파일, 폴더 생성 소스 포스팅 (0) | 2014.02.25 |
---|---|
[c] define으로 함수 선언하기 (0) | 2014.02.25 |
[펌] zlib를 사용법 (2) | 2014.02.20 |
[펌] Zip 알고리즘 (0) | 2014.02.20 |
[zlib] deflate algorithm에 대해서 (0) | 2014.02.18 |