티스토리 뷰

리눅스

[리눅스] ctags 사용법

베비몽 2016. 3. 20. 17:40
[리눅스]ctags 사용법


ctags 란?


ctags 란,

프로그래밍 소스코드의 태그 (전역변수 선언, 함수 정의, 매크로 선언)들의 Database(tags file)를 생성하는 Unix 명령어

즉 쉽게 말해,

함수 및 변수의 위치를 쉽게 인식 할 수 있는 인덱스를 만드는 유틸리티

입니다.

ctags 를 이용하면 소스코드 내에서 함수나 변수가 선언된 곳으로 이동할 수 있기 때문에 Vim 및 emacs 와 같은 에디터에서 특정 심벌을 찾고자 할 때 주로 사용합니다.

ctags의 장점


ctags를 사용하면 소스 코드를 분석하기가 용이해 지기 때문에, 커널과 같은 큰 프로젝트의 소스를 분석할 때 아주 유용합니다.

예를 들어,


 
와 같이 수많은 파일을 가진 커널을 컴파일 하다가


위와 같이  file_sysopen() 함수를 콜하는 과정에서 오류가 났다고 가정합시다.

그럼 어디서 오류가 났는지 알아보기 위해 file_sysopen() 함수 내부를 봐야 할 필요가 있겠죠?

하지만 해당 파일 내에 file_sysopen() 함수가 항상 있지 않기 때문에 어디에 이 함수가 위치하는지 찾기가 힘듭니다.

이 때 ctags를 사용하면

한번에 함수가 어디있는지 알 수 있으며, 해당 함수가 위치한 곳으로 이동할 수도 있습니다.


ctags 설치


먼저

$ctags -help

로 ctags 가 현재 설치 되어있는지 확인하고, 만약 없다면

$ sudo apt-get install ctags

로 설치해 주세요.


ctags 생성


그럼 이제 ctags 를 사용하기 위해 tags 파일을 생성해 봅시다!

tags 파일 은 처음에도 언급했듯 소스코드의 함수정의 나 변수정보를 담는 Database입니다. ( ex) 어느 함수가 어떤 파일의 몇번째 줄에 있는지 등등 )

아래의 명령어로 사용자가 원하는 파일들만 tags 파일을 만들수도 있고,

$ctags 파일이름 ( 여러개의 파일지정도 가능 ex) ctags file1 file2 file3 … )

보통 직접 지정하기 어려운 경우에 ctags를 사용하기 때문에

$ctags -R

명령어로 현재 디렉토리의 모든 파일과 , 하위 디렉토리의 모든 파일까지 tag를 생성합니다.

그러면 아래와 같이 tags 파일이 생성된 것을 확인 할 수 있습니다.



ctags 사용법


tags 파일생성이 완료 되었다면, 어떻게 사용하는지 알아봅시다.


tags 파일 열기


먼저

$ vi tags

tags 파일을 열어주세요! tags 파일은 아래와 같이 구성됩니다.

태그가 각 함수, 변수 등등 마다 생성되었습니다.


사용법


그럼 태그명이 생성 되었으니, 원하는 태그로 이동해 봅시다~
tags 파일을 연 상태에서,

:tj tag명


 


위와 같이 memo 함수로 이동할 수 있습니다.

함수 내부를 모두 본 후 tags 파일로 다시 돌아가고 싶다면,

:po

로 이전 태그로 돌아 갈 수 있습니다.



tags 파일을 연 상태에서,

:stj memo



를 하면 아래와 같이 원하는 태그를 분할된 창에서 볼 수 있습니다.




vim 에디터와 연동하기


하지만 항상 tags 파일을 열어서 원하는 태그로 이동하려면 힘들겠죠?
에디터로 파일을 열어보다가 이 함수의 내부를 보고 싶으면 tags 파일로 이동한 후 함수 이름을 검색해서 그 함수 태그로 함수 내부를 봐야합니다….

이런 번거로움을 방지하기 위해서 자기가 주로 쓰는 에디터와 ctags를 연동해 두면, 보던 파일 내에서도 ctags를 사용할 수 있습니다.

아래와 같이,

$ vi ~/.vimrc

를 열어

set tags=/home/ubuntu/Ctags_ex/tags ( 현재 tags 파일이 있는 경로 , 개개인마다 다릅니다. )

와 같이 tags 파일의 경로를 등록 해주면 됩니다.
( vimrc 파일 내부에 아무것도 없어도 그냥 경로를 등록해주면 됩니다. vimrc 는 환경설정 파일이기 때문에 내용이 숨겨져 있는 경우가 많습니다. )

이제, vi 환경에서도 ctags를 사용할 수 있게 됬어요!



ctags 명령어


여기서는 자주 사용하는 명령어 두가지만 소개하고, 나머지는 표를 보고 익혀보세요^_^

  1. : tj 대신 Ctrl + ]
    명령어 tj 를 칠 필요 없이 해당 함수나 변수 이름 위에서 Ctrl + ] 를 누르면 해당 함수나 변수가 선언된 위치로 이동합니다!


  2. : po 대신 Ctrl + t
    명령어 po를 칠 필요 없이 Ctrl + t 를 누르면 이전 태그로 돌아갑니다!


  3. 그 외의 명령어



댓글
댓글쓰기 폼