ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ctags를 이용한 source 분석
    Programming/Linux 2013. 8. 6. 13:05
    728x90

    회사에서 갑자기 생각나서 쓰는거라 사진이 안올라가네요.

    ==================================================

    요즘 리눅스에서 코딩하거나 소스분석을 하다보면 불편하게 한 두가지가 아니다.

    (그래도 vi사용방법이 예전보다 많이 늘어나서 다행이지만...)

    보통 vi쓰면서 다른 파일을 열려면 현재 사용하는 vi창을 분할해서 사용하곤 했다.

    이렇게 하면 편하긴 한데, 해당 파일 위치나 파일 이름을 다 알고 있어야하는 불편함을 감소해야된다.

     

    vi 창분할 관련 명령

    그래서 많은 프로그래머가 사용하는 방법이 ctags로 함수나 클래스명을 tag등록을 하는 것이다.

    기본적으로 리눅스를 설치하면 ctags가 설치된다.

    ctags는 공개 소프트웨어로 쉽게 얻을수 있을것이다. 리눅스의 경우 웬만한 배포판은 기본으로 포함되어 있으니, 바로 사용하면 된다. 만약 설치되어 있지 않다면 http://ctags.sourceforge.net 를 방문해서 다운한다(yum 이나 apt-get 혹은 wget로 하셔도 될 듯!)

    사용방법은 간단하다. 분석하고자 하는 소스가 있는 디렉토리에서 ctags 명령을 실행시켜주면 된다.

    만약 하위 폴더가 많다면 상당한 시간이 걸린다. (실행 후에는 tags라는 파일이 생긴다.)

    # ctags *
    

    위에서 ctags 는 현재 디렉토리에 있는 모든 파일에 대해서 tags 정보를 작성하도록 했는데, 현재 디렉토리 뿐만 아니라 모든 하위디렉토리에 대해서 tags 정보를 작성하고자 한다면 "-R" 옵션을 사용하면 된다.(find에서도 -R을 줘서 재귀적으로 찾듯, 이것도 동일하다.)

    # ctags -R
    

    ctags 명령을 실행시키고 나면, ctags를 실행한 디렉토리에 tags 란 파일이 생길것이다. 여기에 각 함수가 어느파일에 설치되어 있는지에 대한 정보가 들어 있고, vim으로  tags 파일을 참조하여 해당 함수가 정의되어 있는 파일로 자동으로 이동하게 된다.

    tags 파일의 구성

     

    이제 vi 로 분석하고자 하는 쏘스파일을 열어보자. 분석하는 중에 hello() 라는 알수없는 함수가 나와서 이 함수의 원형이 있는곳으로 이동하고 싶을 때는 hello() 함수에 커서를 위치시키고 Ctrl + ] 를 누르면 된다. 그러면 곧바로 hello() 함수의 원형으로 이동하게 된다. hello() 함수에 대한 분석이 끝나서, 원래 분석하던 쏘스 파일로 돌아오고 싶다면 Ctrl + t키를 누르면 된다.

    vi에서 사용하는 ctags 명령어

    Ctrl+]

    함수가 정의된 파일로 이동

    Ctrl+t

    이동하기 전 단계의 위치로 이동

    :tselect <function-name>

    같은 이름의 function-name이 여러개 일때, 목록을 보여준다. 번호를 이용해서 선택할 수 있다

    :tnext

    여러개의 함수이름이 존재할 때, 다음 함수를 선택한다.

    :tprevious

    이전 함수를 선택한다.

    :tfirst

    가장 처음에 찾았던 함수를 선택한다.

    :tlast

    가장 마지막 함수를 선택한다.

     

    잘 쓰면 정말 편해요 모두 함께 써 봐요~

     

    'Programming > Linux' 카테고리의 다른 글

    vundle 설치  (0) 2014.11.07
    jar파일 터미널에서 실행시키기  (0) 2014.04.09
    mac에서 특정 실행파일 path 잡아주기  (0) 2014.04.09
    mac 터미널 색 변경  (0) 2013.11.10
    Apache + php + CUBRID 연동  (0) 2012.12.01
Designed by Tistory.