/tools

linux 분석용 ctags 와 cscope 사용법

Linux kernel 소스코드 분석에 필요한 ctags와 cscope에 관한 내용이다.

---

ctags 설치

설치는 apt를 이용해서 가능하다.

$ apt install ctags	

ctags의 종류 중에 exuberant-ctags가 기본으로 설치되는 것 같다.

linux 커널 최상위 폴더로 이동해서 tags파일을 만들어주자.

$ cd linux      # maybe?	
$ ctags -R	

easytags 설치

vim에서 바로바로 ctags를 사용하기 위해서 easytags 플러그인을 사용한다. vim에 플러그인을 설치하는 방법은 [여기]참조.

~/.vimrc를 열어서 아래의 내용을 추가한다.

Plugin 'xolox/vim-easytags'	
Plugin 'xolox/vim-misc'	

그 후에 vim을 열어서 :PluginInstall(Vundle의 경우)로 플러그인을 설치한다. 마지막으로 ~/.vimrc를 열어서 ctags관련 설정을 추가해준다.

set tag=./tags	
set tag+=<location of tags file>     # /home/user/linux/tags (for example)	

설정까지 완료했다면 linux 소스코드를 아무거나 열어서 궁금한 함수로 커서를 이동한다. ctrl + ]로 선언부로 이동할 수 있고 ctrl + t로 다시 빠져나올 수 있다.

cscope

cscope도 ctags와 비슷하게 소스코드를 분석할 때 사용하는 툴이다. ctags에서 찾지 못하는 것들을 보완하기위해 같이 사용한다. 심볼, 전역 선언, 호출되거나 호출하는 함수, 문자열등을 추가적으로 검색할 수 있다. 설치는 마찬가지로 apt를 통해 가능하다.

$ apt install cscope	

아래와 같이 cscope가 사용할 데이터베이스를 생성해서 vim에 등록해줘야 하는데 일일이 하기 복잡하다.

$ find . \( -name '*.c' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > cscope.files	
$ make cscope	
$ vim ~/.vimrc	

: cs add /home/user/linux/cscope.out	

이 페이지의 자동으로 cscope의 데이터베이스를 로딩해주는 스크립트를 .vimrc에 추가해주면 편하게 등록할 수 있다.

$ vim ~/.vimrc	

####### Add this to end #######	
function! LoadCscope()	
  let db = findfile("cscope.out", ".;")	
  if (!empty(db))	
    let path = strpart(db, 0, match(db, "/cscope.out$"))	
    set nocscopeverbose " suppress 'duplicate connection' error	
    exe "cs add " . db . " " . path	
    set cscopeverbose	
  " else add the database pointed to by environment variable 	
  elseif $CSCOPE_DB != "" 	
    cs add $CSCOPE_DB	
  endif	
endfunction	
au BufEnter /* call LoadCscope()	

cscope는 vim에서 :cs find [검색 유형] keyword같이 쿼리문을 작성해서 keyword를 검색할 수 있다. plugin을 사용하면 타이핑을 줄이고 쉽게 찾을 수 있다.

Plugin 'ronakg/quickr-cscope.vim'	

검색하고 싶은 키워드에 커서를 두고 ’’ + [검색유형]을 입력하면 아래 결과창에서 결과를 확인할 수 있다.

s : 검색	
g : 정의된 부분 검색	
d : 해당하는 함수에서 호출된 함수 검색 	
c : 해당하는 함수를 호출하는 함수 검색	
t : 해당하는 text문자열을 검색 	

추가적인 vim plugin

추가적으로 taglist나 tagbar를 설치해서 함수나 심볼들을 편하게 이동할 수 있고, Nerdtree를 설치해서 vim안에서 파일들도 올겨다닐 수 있다.

Jaeyoun

Jaeyoun

The maintainer

Read More