NOTICE 
cscope 에 해당하는 글 : 1 개

위대한 비주얼스튜디오가 없어서 개발하기 빡센 유닉스(터미널)환경에서 살아가기 위한 몸부림.

vim + cscope를 이용한 코드분석방법.

우선 현재 사용하고 있는 vim이 cscope 를 지원하는지 체크해 봐야 합니다.

$ vi –version | grep cscope

를 입력해 보시면 cscope라는 단어 앞에 +, - 가 붙어있을텐데 + 가 붙어있다면 현재 vim을 그대로 사용할수 있는거고 – 가 붙어있다면 다시 컴파일해야 합니다.

Vim을 다시 컴파일 해야 할 경우

http://www.vim.org 에서 최신 vim의 unix 버전 소스를 다운 받습니다. 대략 (vim-7.0.tar.gz)  이런 이름.
이걸 유닉스에서 압축을 풀고 해당 디렉토리안에 들어가면 Makefile, configure 등이 있는데

우선

$ ./configure --enable-cscope --enable-multibyte

를 입력하면 뭔가 체크하면서 make 파일을 생성합니다.
그리고 나서

$make

하시면 컴파일이 됩니다.
Src 폴더 안쪽으로 들어가면 vim 실행파일이 생성되어 있습니다. 정상적으로 실행이 되는지

$./vim

으로 테스트해 봅니다.

Vim 7.0의 경우 vim 환경변수가 필요한데 해당 변수는 vim이 실행시 읽어들이는 syntax 나 플러그인 파일의 기준경로입니다.
기본적으로는 /usr/local/share/vim 으로 되어있습니다. 만약 잘못되어 있다면 수정해 줍니다.
Vim 이 정상적으로 잘 실행이 되면 자신의 local/bin 경로에 넣어두거나 쉘의 alias를 수정하여 새롭게 컴파일한 vim이 기본적으로 실행되도록 해놓습니다.


 

Cscope 준비

$cscope


를 실행해서 뭔가 파일입력하라고 나온다거나 하면 cscope가 시스템에 있어서 따로 컴파일할 필요가 없습니다.

Cscope 컴파일
만약 정상실행이 안되서 따로 컴파일이 필요하다면 cscope.sourceforge.org 에서 최신버전을 다운받습니다. (cscope-15.6.tar.gz)

이것도 유닉스에다 받아서 압축을 풀고 해당 디렉토리로 들어가서

$./configure
$make

를 입력해서 컴파일 합니다.
Src 디렉토리에 들어가면 cscope 라는 실행파일이 생성되어있습니다.
해당 파일을 자신의 local/bin에 넣습니다.

Cscope 설정

이제 cscope의 사용을 편리하게 하기 위해서 스크립트를 작성합니다.
스크립트명은 대략 mkcscope 라고 하고 코드는

  1. #!/bin/sh
  2. rm -rf cscope.out cscope.files
  3. find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.m' -o -name '*.s' -o -name '*.S' \) -print > cscope.files
  4. cscope -i cscope.files

입니다. 해당 스크립트를 실행한 위치에서 위에 언급한 소스파일에 대한 심볼 데이타 베이스를 만들라는 의미입니다.
위 스크립트 역시 local/bin에 넣어두고 실행권한을 줍니다.

이제 vim에서 cscope를 사용할수 있도록 설정을 해주어야 합니다.
자신의 홈디렉토리의 .vimrc 파일에

  1. " cscope 설정
  2. set csprg=$HOME/local/bin/cscope
  3. set csto=0
  4. set cst
  5. set nocsverb
  6.  
  7. " 작업 중인 디렉토리 밑의 내용 추가
  8. if filereadable("cscope.out")
  9.  cs add cscope.out
  10. " 아니면 환경 변수에 설정된 내용 추가
  11. elseif $CSCOPE_DB != ""
  12. cs add $CSCOPE_DB
  13. endif
  14. set cscopeverbose " 파일 추가 후에만 자세한 내용 보이게 함
  15.  
  16. " cscope 단축키
  17. nmap <C-[>s :cs find s <C-R>=expand("<cword>")<CR><CR>
  18. nmap <C-[>g :cs find g <C-R>=expand("<cword>")<CR><CR>
  19. nmap <C-[>c :cs find c <C-R>=expand("<cword>")<CR><CR>
  20. nmap <C-[>t :cs find t <C-R>=expand("<cword>")<CR><CR>
  21. nmap <C-[>e :cs find e <C-R>=expand("<cword>")<CR><CR>
  22. nmap <C-[>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
  23. nmap <C-[>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  24. nmap <C-[>d :cs find d <C-R>=expand("<cword>")<CR><CR>
  25.  


을 추가합니다.
이제 설정이 종료되었습니다.

사용법

소스가 있는 디렉토리로 이동하여

$mkcscope

를 입력하면 cscope.out 이라는 파일이 생성됩니다. (해당 파일은 심볼의 DB파일로 소스가 변경이 된다면 갱신을 해주는 것이 좋습니다.)

이후 vim 을 이용하여 해당 디렉토리의 소스의 편집을 시작합니다.
Vim 사용중 특정 함수가 어디서 호출되는지 알고 싶다면

:cs find s [함수명, 클래스명]

을 입력합니다. 이후 리스트가 나오고 번호를 입력하여 해당 소스의 위치로 이동이 가능합니다.
소스 코드의 위치 이동후 소스를 다 확인했으면

CTRL+o 로 이전화면으로 이동 가능하며
CTRL+i 로 다시 cscope에 의해 옮겨 졌던 화면이로 이동가능합니다.

만약 함수가 어디서 선언되었는지 알고 싶다면

:cs find g [함수명or 클래스명]

을 입력합니다.

위에서 .vimrc에 입력한 내용에는 단축키도 있는데
특정 단어위에 커서를 두고

“CTRL+[“ + “s”
또는
“CTRL+[“ + “g”

로 위의 cs 명령과 동일한 동작을 수행합니다.

후기.

C분석은 꽤 잘되는 편이고 C++은 문법상 클래스명과 함수명이 같이 나오므로 나름 보기 나쁘지 않을것 같은데 OBJ-C 같은 경우는 문법이 함수명 근처에 클래스명이 존재하지 않아서 보기 좀 빡셈...

2007/05/11 09:28 2007/05/11 09:28
  
트랙백 0  |  댓글 4  |
 이전  1   다음 

전체 (842)
잡담 (529)
메모 (7)
감상 (109)
일기 (4)
참고 (187)
기록 (6)
fotowall :: ncloud tattertools RSS Feeds today : 114   yesterday : 112
total : 369516