Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

시다바리

[Linux] ctag를 이용한 소스분석 본문

OS/Linux

[Linux] ctag를 이용한 소스분석

호서아빠 2008. 9. 5. 16:25

  ctag는 관련 파일들에서 함수/변수/타입/구조체/매크로 등에 대한 tag를 기록해놓고 쉽게 찾아가게 해준다.

ctags -R *.[ch]

하면 하위디렉토리의 모든 .c와 .h에서 tag를 생성한다. -R옵션을 제거하면 현재 디렉토리에 있는 화일만 tag를 생성한다. 이렇게 생성된 tag화일이 있는 위치를 vimrc화일에 추가한다.

기본적으로 현재 및 상위디렉토리는 있지만, 다른 디렉토리를 검색해야한다면, 추가해주어야 한다.

vim에서는 tag파일이 생성되어 있으면 해당 함수/변수/타입/구조체/매크로에 커서를 놓고 Ctrl+]를 누르면 해당 몸체나 선언부로 이동한다.

Ctrl+T를 누르면 다시 원래대로 온다.

next tag search
:tn

[참고]
원격telnet으로 들어간경우 Ctrl+]를 누르면 컨트롤모드로 들어간다.
telnet에서 Ctrl+]가 escape character이기 때문이다. 그러므로,
일단 컨트롤모드로 들어오면 escape character를 바꾸기 바란다.

telnet> set escape ^[
escape character is '^['.

ctag 를 위한 .vimrc 정보

 "tags
set tags=./tags,../tags,[추가tags경로]...

" paste
set paste

" Function key map
map <F1> K           "man페이지보기
map <F2> :w!         "화일저장
map <F3> [{v]}zf   "폴딩시키기
map <F4> zo          "폴딩복구
map <F5> :30vs .<CR>:set nonumber<CR> "화일브라우징
map <F6> ^Ww       "좌우프레임이동
map <F7> [i           "함수 프로토타입 보기
map <F8> ^]           "함수 추적
map <F9> ^T           "되돌아 오기

[참고]
emacs에서도 tags정보를 활용할 수 있는데,
태그정보를 만들때 ctags 대신 etags 프로그램을 사용해야한다.

개발하는 소스모듈이나 플랫폼이 다양한 경우

tag정보를 보통 vimrc에 넣어놓는데, 만약 다양한 플랫폼의 다양한 소스를 개발하는 경우라면 태그정보가 섞여서 문제가 될 소지가 있습니다. 그러므로, 작업할 directory에 .vimrc 파일을 만들어 위의 line을 넣어놓으시면 됩니다. vim은 실행되면 home의 .vimrc를 읽은 후에 현재 directory의 .vimrc를 읽게 됩니다.  만일 vim이 현재 directory의 .vimrc를 읽지 않는것 같다면 ':set all' 하셔서 noexrc가 설정되어 있는 지 확인해 보시기 바랍니다. exrc 이어야 local 디렉토리의 .vimrc를 읽습니다. 만일 noexrc라면 ~/.vimrc에서 ':set noexrc' 라는 line이 있을 가능성이 있습니다. ':set exrc'를 ~/.vimrc에 넣어놓으십시오.

같은 keyword에 대해 여러곳에서 선언된 경우에는 가끔  "tag 1 of 2 or more" 와 같은 메시지가 뜨는 것을 보실 수 있을 겁니다. 이것은 해당 keyword에 대한 tag가 여러개 있다는 의미입니다. 그 keyword 위에서 g] 를 입력해 보십시오. VIM은 tag list를 나열한 후 선택할 수 있도록 해 줍니다.

Ctrl+]만 사용할 수 있는 것은 아닙니다. 현재 cursor 위치가 찾고 싶은 keyword 위에 없는 경우에는?

:ta keyword 
:tj keyword

로 찾을 수 있습니다.

좀더 자세한 사항을 알고 싶으면?  
  :help tags
  :help g]
  :help :tjump
  :help :sts
  :help :tn
 
반드시 :help tags를 해서 대충이라도 읽어보시기 바랍니다. 여기에서 설명해 드리지 않은 많은 유용한 명령들이 거기에 있습니다.

Comments