ctags & cscope 설치 및 사용
참고 : http://blog.naver.com/ikariksj/140024963956
1. ctags 란 ?
= > ctags는 프로그래밍 소스 코드의 태그 (전역변수 선언, 함수 정의, 메크로 정의)들의
데이터 베이스(tags파일)을 생성하는 명령어입니다.
커널 소스 분석등 작업에서 탁월한 성능을 발휘합니다
2. ctags 버전 확인하기
= > (쉘에서) $ctags --version 이라고 입력한다 설치 돼어 있는경우 버전 정보가 나옵니다
cannat commond find => 깔려 있지 않을시 에러 출력
( 대부분 기본리눅스에서 디폴트로 깔려 있지 않을것이다 처음 설치시 전체 설치 또는..
선택 설치로 ctags를 설치 한경우라면 몰라도 디폴트로는 거의 안깔려 있습니다.
특히 ubuntu 의 경우 원래 데스크탑용으로 개발 돼고 있어서.. 개발 툴이 하나도 안깔려 있기
때문에 별또 설치를 필요로 합니다 )
3. ctags 설치하기
=> ubuntu 의 경우 레드헷 이나 페도라 등 다른 리눅스에 비해 비교적 쉽게 설치할수 있습니다
레드헷일 경우 rpm 버전을 따로 다운 받아 설치 해야 하는 방면 데비안 계열 명령어
apt-get으로 간편하게 설치가 가능합니다
ubuntu 설치 하기
(쉘에서) $apt-get install ctags (자동으로 최신 버전으로 설치 됩니다 )
redhat 설치하기 http://sourceforge.net/projects/ctags (rpm 버전을 다운 받은후)
(쉘에서) $rpm -ivf 다운받은 rpm 파일명 (으로 설치 하실수 있습니다)
설치 완료 후 2번 과정 버전을 확인 하면 버전 정보가 재대로 나오면 재대로 설치가 되었습니다.
레드헷 일 경우 lib.so 에러가 발생할수 있는데 버전이 안맞는 것을 깔면.. 설치가 재대로
돼지 않는 문제점이 발생합니다 위 링크에서 최신버전 5.6.1 의 경우 페도라 5 용 이므로
레드헷일 경우 5.0 버전 이나 찾아보시고 하위 지원 돼는 버전을 설치 해야 합니다..
확인 결과 5.0.1 은 재대로 설치가 가능하더라고요..
4. tags 파일 만들기
= > 우선 커널이 있는 폴더로 이동 합니다
$cd /usr/src/linux/ <== ( 전 linux로 심볼릭 링크가 돼어 있습니다 안돼어 있다면
심볼릭 링크를 만드셔도 돼고 직접 경로를 다 입력 하셔도 상관없습니다)
심볼릭 링크 만들기 -> ln -s /usr/src/커널폴더명 linux
커널 폴더로 이동했으면 ctags -R 을 입력하여 tags 파일을 생성합니다
시간이 좀 걸리는데 ls로 tags 파일이 생성 된걸 확인 합니다
$cd /usr/include 폴더로 이동 합니다
마찬가지로 ctags -R 명령으로 include 폴더도 tags 파일을 생성 합니다
정상적으로 파일이 생성 되었다면 다음 단계로 넘어갑니다
5. ctags 설정 하기
= > 설치 가 완료 되고 tags파일이 생성 되었다면 작업이 거의 끝난거나 마찬 가지 입니다.
매번 vi 에서 ex모드 에서 입력하는거도 한계가 있으므로 .vimrc 파일에
tags 를 설정 해두는게 편합니다
vimrc 파일에 다음 라인을 입력 한후 저장합니다
set tags=./tags,/usr/src/linux/tags,/usr/include/tags
(linux 의 경우 심볼릭 링크 한경우) 직접 폴더를 입력 하신분은 경롱에 맞게 설정 합니다
참고 : Joinc
일단 분석하고자 하는 쏘스의 디렉토리로 이동한다. 그리고 아래와 같은 방법으로 실행하면 된다.
| [root@localhost user_admin_file]# ctags * |
위에서 ctags 는 현재 디렉토리에 있는 모든 파일에 대해서 tags 정보를 작성하도록 했는데, 현재 디렉토리 뿐만 아니라 모든 하위디렉토리에 대해서 tags 정보를 작성하고자 한다면 "-R" 옵션을 사용하면 된다.
| [root@localhost user_admin_file]# ctags -R |
ctags
명령을 실행시키고 나면, ctags를 실행한 디렉토리에 tags 란 파일이 생길것이다. 여기에 각 함수가 어느파일에 설치되어
있는지에 대한 정보가 들어 있고, vi 를 실행 시키면 tags 파일을 참조하여 해당 함수가 정의되어 있는 파일로 자동으로
이동하게 된다.
tags 파일은 아래와 같이 구성되어 있다.
| hello hello.c /^void hello(void)$/;" f |
각필드는 "tab" 으로 구분된다. 첫번째 필드는 함수이름, 두번째 필드는 함수가 정의된 파일의 이름, 세번째 필드는(vi
를 좀 다룰줄 아는 유저 라면 익숙한 문장일 것이다), 해당 파일에서 vi가 함수명을 찾아가도록 하기위한 vi command
이다. 4번째 필드는 해당 함수의 타입이다. "f" 라면 일반 C 함수라는 뜻이며, "c" 는 클래스에 선언된 멤버함수, "d"
는 define 된 값이란 뜻이다.
이제 vi 로 분석하고자 하는 쏘스파일을 열어보자. 분석하는 중에
hello() 라는 알수없는 함수가 나와서 이 함수의 원형이 있는곳으로 이동하고 싶을 때는
hello() 함수에 커서를 위치시키고 "Ctrl + ]" 를 누르면 된다. 그러면 곧바로
hello() 함수의 원형으로 이동하게 된다.
hello() 함수에 대한 분석이 끝나서, 원래 분석하던 쏘스 파일로 돌아오고 싶다면 "Ctrl + t"키를 누르면 된다.
사용하기
=====================================================
여기 까지 했다면 설치 및 설정은 완료 되었습니다..
이제 사용 하는거만 남았는데
복잡하게 책에는 여러 옵션이 많지만 보통 잘안쓰는 옵션들은.. 거의 쓸일이 없고..
자주 쓰는 것만 다루겠습니다.
ex 모드 -> vi 에서 : 을 눌러서 명령을 입력 하는 모드를 말합니다
ex 모드에서 :tj 함수명 이나 구조체명 (왜 tj 인가 ? tags jump 약어)
(찾고자 하는 함수명이나 구조체 이름등을 입력 하면 관력 이름 함수나 구조제..정보가 나타 납니다 )
보통 한두가개 아닌경우 스페이스바를 누르면 목록이 더나오며 d 를 누를 경우 한페이지씩..
보여 줍니다 나갈때는 q로 나갈수 있습니다 그럼 <CR> 이 나오는데 여기서 찾은 함수나 구조체
번호를 입력 하면 자동으로 점프합니다
다른 방법으로 가는 방법은 커널 소스를 vi열어서 분석하다가 함수 원형이나 구조체 이름에서
ctrl + ] 를 누르면 자동으로 태그를 찾아 갑니다
이전으로 다시 돌아 올때는 ctrl + t 를 사용 해서 돌아 올수 있습니다
ex모드 : sts 함수명 , 구조체명
위에서 설명한 tj와 비슷 하지만 한가지 다른점이 수평창분활을 해서 결과를 보여 줍니다
이외 명령이 더 있지만 실제 이거만 알아도 충분 합니다 나머지 이전으로 돌아가기 이런건..
거의 실제 사용 되지도 않습니다 위에 설명한 4가지 방법이 주로 쓰는 방법입니다.
[tip] 헤더 파일 바로 읽어 오기
#include <linux/kernel.h> <- 헤더파일 이름에 커서를 위치 한후
Ctrl + wf 를 누르면 창이 수평 분할되어 헤더파일이 열립니다
====================================================
cscope 를 이용한 2%로 채우기
ctags만으로도 커널소스와 소규모 프로젝트롤 분석하는데 부족함은 없지만..
2%로 부족한게 있다 ctags만으로는 지역변수나 전역변수가 사용된곳 은 찾기가 힘들다
이때 cscope 사용하면 됩니다
cscope 설치 하기
ubuntu = > $apt-get install cscope 로 간단히 설치 할수 있다 (데비안 계열의 강점)
redhat
(다운 로드)
wget http://belnet.dl.sourceforge.net/sourceforge/cscope/cscope-15.3-1.i386.rpm
설치 하기
$rpm -ivf cscope-15.3-1.i386.rpmcscope 설정 하기 cscope 설정은 좀 손이 많이 갑니다 (ctags에 비해...)
우선 mkcscope.sh 파일을 만들어야 합니다
============ mkcscope.sh 파일 내용 ================
#!/bin/sh
rm -rf cscope.files cscope.files
find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name
'*.S' \) -print > cscope.files
cscope -i cscope.files ============================================
파일 생성 후 파일 퍼미션 설정
$chmod 755 mkcscope.sh
$mv mkcscope.sh /usr/bin 디렉토리 이동
$cd /usr/src/linux (심볼릭 링크 아닐시 전체 경로)
mkcscope.sh 실행 하면 빌드 돼면서 데이터가 만들어 집니다
빌드 종료시 값을 입력 하는게 나오는데 ctrl + d를 눌러서 종료 합니다.
이후 .vimrc 파일에 다음 내용을 추가 합니다
============================================= set csprg=/usr/bin/cscope
set csto=0(숫자 0)
set cst
set nocsverb
if filereadable("./cscope.out")
cs add cscope.out
else
cs add /usr/src/linux/cscope.out
endif
set csverb ============================================== 이제 설정은 끝이 났습니다 사용하기 ( cscope 의 명령 형식 )
:cs find {질의종류} {심벌}
ex) cs find s start_kernel
cscope 의 질의 종류
0 or s - > Find this C symbol
1 or g - > Find this definition
2 or d - > Find functions called by this function
3 or c - > Find functions calling this function
4 or t - > Find assignments to
6 or e - > Find this egrep pattern
7 or f - > Find this File
8 or i - > Find files #including this file
cscope 를 활용 함으로써 더 완벽히 커널소스를 분석할수 있지만 ctags 만 사용하는거 보다
cscope 를 같이 사용 하니까 찾는데 시간이 더 오래 걸리는거 같네요..
.vimrc 파일에서 cscope 세팅 부분을 주석으로 해두고 사용하다가..
더 깊게 찾을 필요가 있을때 사용 하는게 더 편할듯 싶은데..
그냥 설정 된 체로 ctrl + ] 를 남발하면 ctags만 있을때는 더이상 찾을게 없으면
그냥 위치에서 멈처 있는데 cscope 가 세팅 돼어 있다면 계속 해서 파일을 검색해서
검색하는데 시간이 좀 걸려서..^^;; 거슬릴때가 있네요..
정리 할겸 만들어 봤는데 생각보다 시간이 오래 걸리는듯..
해보시고 안돼는거 있으면 댓글 달아 주세요..
기존 내용에서 추가 된 부분입니다..
Tlist 내용이 빠져서 다시 수정합니다..
뭐 크게 달라지는 내용은 없고요.. Tlist 가 먼지 모르는 분도 있을테니까요..
간단하게 Tlist 를 설명하지면 TagList 약자로써.. 이름에서 설명하는거 처럼..
해당 파일의 정의된 함수명,변수(#define), 등을 이름으로 효율적으로 보여주는 유틸리티 입니다.
ctag & cscope 와 연동해서 사용하면 무척 효율적이죠..
말로 설명하는게 감이 안오시는분은.. Visual C++에서요 Cpp 확장자로 작업하시면..
클레스 별로.. 함수 이름이 나와서 관리 할수 있잖아요.. 그거랑 똑같다고 보시면 돼요..
관련 문서는 인터넷에서 검색하면 쉽게 찾을수 있고요..
못찾겠다 싶은 분들은 제 게시판에 잘설명된게 있어서 퍼와서 올려 뒀어요.. 참고하세요..^^
http://blog.naver.com/ikariksj/140026617491
http://www.xinublog.com/287
=== 2차 수정부분 === [ 2006/09/21 ]mkcscope.sh 파일 생성시 띄워쓰기 주의를 하지 않으면..
문제가 발생하는게 확인 돼었습니다..
한줄로 붙여서 쓰면 보기 불편해서 두줄로 짤라뒀는데..
그부분을 그대로 복사해서 붙여 넣으면 오류가 발생하네요..
물론 직접 코딩하는거면 띄위쓰기 주의하면서 하면 괜찮은데..ㅎ
작성된지 좀
Trackback address :: http://4ellene.net/tt/trackback/1198
-
Tracked from best rated online casinos
2009/03/30 10:47
삭제
strip poker
-
Tracked from viagra cheap
2009/04/03 01:35
삭제
viagra online
-
Tracked from virgin rape
2009/04/13 10:34
삭제
violent rape stories
-
Tracked from rape gang young
2009/04/13 19:39
삭제
rape games
-
Tracked from school girl rape
2009/04/14 06:19
삭제
russian rape porn
-
Tracked from forced deepthroat
2009/04/14 16:13
삭제
forced bondage
-
Tracked from silent screams bdsm
2009/04/15 02:51
삭제
public bdsm
-
Tracked from girl forced sex
2009/06/29 06:46
삭제
rape porno
-
Tracked from hot rape
2009/06/29 18:34
삭제
rape in high school
-
Tracked from sex stories forced
2009/06/29 21:10
삭제
rape porn films
-
Tracked from forced family sex
2009/06/30 01:05
삭제
stories rape
-
Tracked from forced college sex
2009/06/30 02:42
삭제
rape drawings
-
Tracked from virgin rape
2009/06/30 09:35
삭제
rape dvd
-
Tracked from forced sex fantasies
2009/06/30 11:55
삭제
bizarre extreme sex
-
Tracked from violent rape comics
2009/06/30 19:47
삭제
rape scenes in movies
-
Tracked from women rape
2009/06/30 20:35
삭제
forced sex reporter
-
Tracked from rape of nanking
2009/06/30 22:31
삭제
drug rape girl porn
-
Tracked from rape xxx
2009/07/01 05:31
삭제
forced sex video clips
-
Tracked from rape pictures
2009/07/01 09:20
삭제
rape young
-
Tracked from extreme penetrations
2009/07/01 11:15
삭제
rape anal
-
Tracked from prison rape stories
2009/07/01 11:27
삭제
teen rapes
-
Tracked from forced sex clips
2009/07/01 14:14
삭제
brutal fisting
-
Tracked from forced sex online videos
2009/07/01 16:58
삭제
teacher rape
-
Tracked from throat rape
2009/07/01 20:42
삭제
vietnam rape
-
Tracked from father rapes daughter
2009/07/02 07:26
삭제
rape comics
-
Tracked from japanese forced sex
2009/07/02 12:26
삭제
rape comics
-
Tracked from rape videos
2009/07/02 16:14
삭제
forced womanhood
-
Tracked from brutal anal
2009/07/03 09:04
삭제
femdom rape
-
Tracked from us online casino
2009/07/10 01:53
삭제
casino on the net
-
Tracked from casino tour
2009/07/10 04:04
삭제
topgame online casinos
-
Tracked from best online casino
2009/07/10 07:27
삭제
casino gamble
-
Tracked from new online casino
2009/07/10 12:00
삭제
java internet casino
-
Tracked from java internet casino
2009/07/10 23:31
삭제
casino web sites
-
Tracked from vip casin
2009/07/11 17:17
삭제
free cash online casino
-
Tracked from casinos online
2009/07/11 19:05
삭제
online casinos no deposit bonuses
-
Tracked from no deposit online casino
2009/07/12 08:49
삭제
online casino usa
-
Tracked from online casino gaming
2009/07/12 11:47
삭제
casinos http
-
Tracked from casino website
2009/07/13 13:15
삭제
online casino for south dakota
-
Tracked from online free casino games
2009/07/15 03:17
삭제
casino gaming online
-
Tracked from u s online casino
2009/07/15 06:48
삭제
online casinos win bonus
-
Tracked from play casino online
2009/07/15 19:46
삭제
free online casino
-
Tracked from online casinos win bonus
2009/07/16 08:48
삭제
usa online casino
-
Tracked from new online casinos
2009/07/16 19:26
삭제
casino deposit bonus
-
Tracked from online casino
2009/07/17 00:29
삭제
internet casino online
-
Tracked from play poker online
2009/07/17 01:30
삭제
online casino game
-
Tracked from online usa casinos
2009/07/17 16:49
삭제
highest paying online casino
-
Tracked from casino poker game online
2009/07/17 18:52
삭제
casino http
-
Tracked from internet casino online
2009/07/18 06:16
삭제
grand online casino
-
Tracked from online casino gambling portal
2009/07/19 15:57
삭제
casino gaming table
-
Tracked from no deposit online casino listings usa
2009/07/20 00:34
삭제
online casino no depost
-
Tracked from shemale thumbs
2009/07/20 05:02
삭제
perfect ladyboy
-
Tracked from transexual cum
2009/07/20 07:59
삭제
futanari sex
-
Tracked from post op tranny
2009/07/21 06:44
삭제
hot tranny
-
Tracked from ladyboy sex
2009/07/21 15:14
삭제
sexy transexuals
-
Tracked from las vegas transvestites
2009/07/21 19:24
삭제
shemale hentai
-
Tracked from lesbian tranny
2009/07/22 04:47
삭제
ladyboy sex
-
Tracked from ladyboy stories
2009/07/22 07:39
삭제
brazilian transexuals
-
Tracked from shemale gods
2009/07/22 18:34
삭제
transexual cum
-
Tracked from ladyboy gallery
2009/07/22 20:26
삭제
cum eating transvestite sissies
-
Tracked from big tits transexuals
2009/07/23 23:23
삭제
beautiful transexuals
-
Tracked from latin tranny
2009/07/24 09:14
삭제
shemale movies
-
Tracked from transgender pics
2009/07/24 17:20
삭제
tranny cumshot
-
Tracked from dad and daughter sex
2009/09/06 04:34
삭제
daughter incest incest
-
Tracked from young incest
2009/09/06 05:57
삭제
sister sex
-
Tracked from dad with sis son sex mom
2009/09/06 06:53
삭제
dad fucking virgin daughter
-
Tracked from dad with sis son sex mom
2009/09/06 09:29
삭제
dad fucking virgin daughter
-
Tracked from incest videos
2009/09/06 12:35
삭제
incest movies
-
Tracked from mom son fucking
2009/09/06 23:12
삭제
mom strips for son
-
Tracked from father daughter sex
2009/09/07 01:57
삭제
daddies fucking daughters
-
Tracked from brother sister incest
2009/09/07 08:47
삭제
3d incest
-
Tracked from incest movies
2009/09/07 09:05
삭제
family sex
-
Tracked from Free Incest Sex Stories
2009/09/08 05:36
삭제
incest pics
-
Tracked from brother sister incest
2009/09/08 05:40
삭제
3d incest
-
Tracked from sibling incest
2009/09/09 11:05
삭제
father son sex
-
Tracked from dad son sex
2009/09/09 11:15
삭제
daughter incest incest
-
Tracked from mom licks daughter
2009/09/09 21:05
삭제
mom and daughter sex
-
Tracked from 3d incest
2009/09/09 21:15
삭제
amateur incest family porn
-
Tracked from nipple torture
2009/09/11 06:28
삭제
outdoor bondage
-
Tracked from bondage videos
2009/09/12 03:27
삭제
boob torture
-
Tracked from bdsm cartoons
2009/09/12 04:21
삭제
bdsm collars
-
Tracked from extreme bondage
2009/09/12 10:52
삭제
female domination
-
Tracked from light bondage
2009/09/12 20:56
삭제
male bdsm
-
Tracked from self bondage
2009/09/13 00:19
삭제
sex bondage
-
Tracked from secretary bondage
2009/09/14 11:57
삭제
sex bondage
-
Tracked from bdsm free
2009/09/14 12:19
삭제
bdsm gallery
-
Tracked from pussy torture
2009/09/15 17:41
삭제
rubber bondage
-
Tracked from anime bondage
2009/09/15 21:26
삭제
asian bondage
-
Tracked from guy bondage
2009/09/16 06:17
삭제
hardcore bdsm
-
Tracked from anime bdsm
2009/09/16 07:31
삭제
asian bondage
-
Tracked from asian bdsm
2009/09/16 12:24
삭제
ball torture
-
Tracked from Mom And Son Sex Galleries
2009/09/27 12:18
삭제
Mother Son Porn
-
Tracked from fucked her son
2009/09/27 14:16
삭제
incest cartoon
-
Tracked from sibling sex
2009/09/28 15:06
삭제
dad fucking son
-
Tracked from incest mother and daughter
2009/09/29 12:54
삭제
incest stories
-
Tracked from brother sister incest
2009/09/29 14:48
삭제
sister fucking brother
-
Tracked from anime incest
2009/09/29 15:57
삭제
brother and sister sex stories
-
Tracked from incest pictures
2009/10/02 20:56
삭제
incest taboo
-
Tracked from lesbian twin sisters
2009/10/03 12:22
삭제
mom and daughter
-
Tracked from incest rape
2009/10/04 07:09
삭제
incest taboo forum
-
Tracked from incest videos
2009/10/04 10:15
삭제
incest video
-
Tracked from bdsm library
2009/10/20 11:08
삭제
bdsm movies
-
Tracked from informed consent bdsm
2009/10/22 09:17
삭제
japanese bdsm
-
Tracked from bdsm fiction
2009/10/22 15:05
삭제
bdsm for all
-
Tracked from free bdsm videos
2009/10/23 10:49
삭제
gay bdsm
-
Tracked from bondage comics
2009/10/23 14:11
삭제
bondage directory
Comments List
嫄몄