2 분 소요

1. ctags란?

ctags란 프로그램이 소스코드의 태그(전역번수 선언, 함수 정의, 매크로 선언)들의 Database(tags file)를 생성하는 Unix 명령어이다.

즉 쉽게 말해, 함수 및 변수의 위치를 쉽게 인식할 수 있는 인덱스를 만드는 유틸리티이다

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

2. ctags 장점

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

예를 들어,

ctag1

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

ctag2

위와 같이 file_sysopen() 함수를 콜하는 과정에서 오류가 났다고 가정하자.
그럼 어디서 오류가 났는지 알아보기 위해 file_sysopen() 함수 내부를 봐야 할 필요가 있다.
하지만 해당 파일 내에 file_sysopen() 함수가 항상 있지 않기 때문에 어디에 이 함수가 위치하는지 찾기가 힘들다.
이때 ctags를 사용하면 한번에 함수가 어디있는지 알 수 있으며, 해당 함수가 위치한 곳으로 이동할 수도 있다.

3. ctags 사용

3.1 ctags 설치

먼저

1
$ctags -help

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

1
$sudo apt-get intall ctags

3.2 ctags 생성

그럼 이제 ctags를 사용하기 위해 tags 파일을 생성해보자.

tags 파일은 소스코드의 함수정의나 변수 정보를 담는 Database이다.

  • 아래의 명령어로 사용자가 원하는 파일들만 tags 파일을 만들 수도 있다.
    1
    
    $ctags 파일이름 (여러 파일 지정 가능 ex) ctags file1 file2 file3 ..)
    
  • 보통 직접 지정하기 어려운 경우에 ctags를 사용하기 때문에
    1
    
    $ctags -R
    

    명령어로 현재 디렉토리의 모든 파일과, 하위 디렉토리의 모든 파일까지 tag를 생성한다. 그러면 아래와 같이 tags 파일이 생성된 것을 확인할 수 있다.

3.3 ctags 사용법

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

  1. tags 파일 열기 먼저
    1
    
    $vim tags
    

    tags 파일을 열어준다. tags파일은 아래와 같이 구성된다.

    ctags4

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

  2. 사용법
    • tag 이동
      그럼 태그명이 생성 되었으니, 원하는 태그로 이동해 보자 tags 파일을 연 상태에서,
      1
      
      :tj tag명
      

      ctag5

      ctag6
      위와 같이 memo 함수로 이동할 수 있다.
      함수 내부를 모두 본 후 tags 파일로 다시 돌아가고 싶다면,

  • 이전 태그 이동
    1
    
    :po
    

    로 이전 태그로 돌아 갈 수 있다. ctag7\

  • 창 분할 이동
    또 tags 파일을 연 상태에서,
    1
    
    :stj memo
    


    ctag8

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

    ctag9

4. vim 에디터와 연동하기

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

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

아래와 같이,

1
$vim ./.vimrc

를 열어

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

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

이제 vim환경에서도 ctags를 사용할 수 있게 되었다. ctag10

5. ctags 명령어

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

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

  • : po 대신 Ctrl + t 명령어 po를 칠 필요 없이 Ctrl + t를 누르면 이전 태그로 돌아간다. ctag12

  • 그 외의 명령어 ctag13 ctag14

Ref.

카테고리:

업데이트: