티스토리 뷰


리눅스에서 vim을 쓰는 사람이면 으레, 당연시리 사용하는 툴셋이 있다.

gtags(ctags) + NERDtree + src expl + cscope + vundle


이 중 vundle은(오타아님) 이래저래 하나씩 받아보면 꽤나 귀찮은 vim의 플러그인들을 관리해주는 녀석이라 요새 잘 쓰고 있음.

매 끼 밥상 바뀌듯 거의 매 분기마다 바뀌는 듯한 작업 환경, 서버, 컴퓨터 때문에 매번 이걸 하나하나 설치하는 것도 꽤나 귀찮은 일-




PluginSearch 한 다음 .vimrc에 넣어주기만 하면 되니

이 또한 편치 아니한가



소스 따라다니려면 어릴 적 봉알친구마냥,

좋아 죽지 못해 꼭 붙어다니는 커플마냥(ㅇ ㅏ ..)

vim과 거의 '반드시'같이 사용되는게 cscope인데, 이 녀석이 AndroidL이 나오면서 좀 삽질을 하고 있다. 


물론 원인은 모름.

알면 내가 고쳐서 쓰고 있겠지 -ㅅ-ㅋ


그러다 추천받은게 gnu global

https://www.gnu.org/software/global/global.html


vundle에서 찾아봤는데 목록에 안나온다.

아마도 vundle이 참조하는 github에 안올라왔거나, global 홈페이지에서 소스 형태로만 배포하니까 그런 듯-


https://www.gnu.org/software/global/download.html

위 페이지에서 일단 소스 패키지를 다운받아 준다. 오늘 기준으로 올라와 있는 패키지는 6.4 버전 : global-6.4.tar.gz

회사 서버는 개인 계정에 sudo 권한도 주지 않기 때문에 내 계정에 따로 설치를 해주어야 한다.


절차는 매우 간단. 세 단계만 거치면 내 계정에 global 설치를 끝낼 수 있다.


$ sh reconf.sh
$ ./configure
$ make


그리고 마지막으로 make install

global 설치 시 autoconf, gperf, automake bison, flex, libtool 그리고 ncurses-dev가 필요하다.

없으면 ./configure할 때 에러.

그리고 makeinfo가 없으면 make 하다가 에러. -> sudo apt-get install texinfo


내 계정에 설치해야 하기 때문에 ./configure 해줄 때만 약간 변경을 해주면 :

$ ./configure --prefix=<home directory>


다른 툴을 설치해야 할 때, 툴마다 자신이 저장될 bin 디렉토리를 만들기도, 그냥 바로 설치하기도 하기 때문에 일단 귀찮아서라도 -_-

내 계정에 bin 디렉토리를 따로 만들어 주었다. 해서 내 경우는

$./configure --prefix=~/bin


그리고 global을 실행해줘야 하니까 .bashrc에 경로 추가

export PATH=~/bin/bin:$PATH






global의 특이점이라면 다른 tag/분석툴과 달리 쉘에서 바로 실행될 수 있다는 점(을 홈페이지에서는 강조한다)

뭐 여기저기서 실행할 수 있다면 좋은 일-


먼저 어루만지고자 하는 소스의 루트에 가서

$gtags


해주면 GTAGS / GRTAGS / GPATH가 생성되는데, 이름 그대로 정의/참조관계/경로정보를 담고 있는 녀석들.

390MB정도의 커널에 대한 태그를 만들면 총 290MB가량의 태그가 만들어진다.


쉘에서 간단히 start_kernel이 어디있는지 보려면

vincentlee@selandroid02:~/kernel$ global start_kernel
arch/alpha/boot/bootp.c
arch/alpha/boot/bootpz.c
arch/alpha/boot/main.c
init/main.c


의 결과가 보여진다. 




해당 함수를 참조하는 부분과 이에 해당하는 코드 조각을 보려면 -r과 -x이고, 옵션은 조합된다.

vincentlee@selandroid02:~/kernel$ global -rx start_kernel
start_kernel      123 arch/frv/kernel/debug-stub.c              __debug_frame->pc = (unsigned long) start_kernel;
start_kernel      563 arch/metag/kernel/setup.c         start_kernel();
start_kernel     1206 arch/mn10300/kernel/gdb-stub.c            regs->pc = (unsigned long) start_kernel;
start_kernel      375 arch/parisc/kernel/setup.c        extern void start_kernel(void);
start_kernel      396 arch/parisc/kernel/setup.c        start_kernel();
start_kernel      295 arch/sparc/kernel/setup_32.c      start_kernel();
start_kernel       76 arch/tile/kernel/setup.c DEFINE_PER_CPU(unsigned long, boot_pc) = (unsigned long)start_kernel;
start_kernel       82 arch/tile/kernel/setup.c unsigned long __initdata boot_pc = (unsigned long)start_kernel;
start_kernel       32 arch/um/kernel/skas/process.c extern void start_kernel(void);
start_kernel       46 arch/um/kernel/skas/process.c     start_kernel();
start_kernel       49 arch/x86/kernel/head32.c  start_kernel();
start_kernel      193 arch/x86/kernel/head64.c  start_kernel();
start_kernel       10 include/linux/start_kernel.h extern asmlinkage void __init start_kernel(void);

뭐 이런 식-

기타 이런저런 옵션들은 find/grep 등과 같은 키워드를 사용하는 경우가 많으니 적응에 그리 오랜 시간이 걸리지는 않을 듯 하다.



vim에서도 globald을 연동해서 사용할 수 있는데 아래의 페이지에 예제가 설명되어 있다.

https://www.gnu.org/software/global/globaldoc_toc.html#Vim-editor

하나씩 해볼 필요가-





일단은 설치는 다 햇는데 cscope에 적응된 손을 바꾸려면 이것도 또 일이네 ㅋ

튜토리얼 페이지가 따로 제공되니 먼저 이것부터 하나씩 따라해봅시다-

https://www.gnu.org/software/global/globaldoc_toc.html


기변이란 언제나 적응의 설레임과 고통을 함께하는 일인지라, 설정/적응 끝나면 새로 나온 A53 옥타 살릴 때 열심히 써봐야겠다.




댓글