ctags 활용

ctags 를 이용하면, 사용자 정의 함수가 나왔을때, 함수가 정의되어 있는 쏘스파일로 바로 점프할수 있으며, 또한 바로 원래의 쏘스파일로 되돌아올수 있다. 이렇게 함으로써 쏘스분석에 드는 시간을 상당히 줄일수 있다.
이번 문서에는 사용자가 vi 를 사용하고 있다는 가정하에 ctags 의 사용법을 설명하도록 하겠다.

ctags 는 공개 소프트웨어 임으로 쉽게 얻을수 있을것이다. 리눅스의 경우 웬만한 배포판은 기본으로 포함되어 있으니, 바로 사용하면 된다. 만약 설치되어 있지 않다면 www.rpmfind.org이나 www.freshmeat.net 등의 사이트에서 구해서 설치하면 된다.

일단 분석하고자 하는 쏘스의 디렉토리로 이동한다. 그리고 아래와 같은 방법으로 실행하면 된다.

[root@localhost user_admin_file]# ctags *
위에서 ctags 는 현재 디렉토리에 있는 모든 파일에 대해서 tags 정보를 작성하도록 했는데, 현재 디렉토리 뿐만 아니라 모든 하위디렉토리에 대해서 tags 정보를 작성하고자 한다면 "-R" 옵션을 사용하면 된다.
[root@localhost user_admin_file]# ctags -R
ctags 명령을 실행시키고 나면, ctags를 실행한 디렉토리에 tags 란 파일이 생길것이다. 여기에 각 함수가 어느파일에 설치되어 있는지에 대한 정보가 들어 있고, vi 를 실행 시키면 tags 파일을 참조하여 해당 함수가 정의되어 있는 파일로 자동으로 이동하게 된다.
tags 파일은 아래와 같이 구성되어 있다.
hello hello.c /^void hello(void)$/;" f
각 필드는 "tab" 으로 구분된다. 첫번째 필드는 함수이름, 두번째 필드는 함수가 정의된 파일의 이름, 세번째 필드는(vi 를 좀 다룰줄 아는 유저 라면 익숙한 문장일 것이다), 해당 파일에서 vi가 함수명을 찾아가도록 하기위한 vi command 이다. 4번째 필드는 해당 함수의 타입이다. "f" 라면 일반 C 함수라는 뜻이며, "c" 는 클래스에 선언된 멤버함수, "d" 는 define 된 값이란 뜻이다.


이제 vi 로 분석하고자 하는 쏘스파일을 열어보자. 분석하는 중에 hello() 라는 알수없는 함수가 나와서 이 함수의 원형이 있는곳으로 이동하고 싶을 때는 hello() 함수에 커서를 위치시키고 "Ctrl + ]" 를 누르면 된다. 그러면 곧바로 hello() 함수의 원형으로 이동하게 된다.
hello() 함수에 대한 분석이 끝나서, 원래 분석하던 쏘스 파일로 돌아오고 싶다면 "Ctrl + t"키를 누르면 된다.
추가로 소스 파일 내에서 ctags를 사용하기위해선
: set tags= tags파일이 있는  path
해주어야한다.  매번 분석할때마다 해주어야 하는 해서 귀찬긴하지만 소스를 직접 따라다니는거에 비하면...음.. 
위로 스크롤