Cscope - 소스 코드 브라우징 도구
출처 :
http://blog.deogtae.name/30002201310
소개
- 홈 페이지: http://cscope.sourceforge.net/
- C 소스 코드 브라우징 도구 (C++, 자바, 텍스트 파일도 제한적으로 지원)
- 검색 기능
- 심볼의 모든 참조
- 전역 정의
- 특정 함수에 의해 호출되는 함수들
- 특정 함수를 호출하는 함수들
- 텍스트 스트링
- 정규식 패턴
- 파일
- 특정 파일을 포함하는 파일들
- 설치 절차
- 홈 페이지에서 cscope 배포본을 다운로드한다.
- 배포본내의 INSTALL 파일을 참조하여 설치한다. 혹은 빌드된 바이너리를 웹에서 검색하여 사용한다. 다음은 윈도우즈에서 cygwin을 설치한 환경하에서의 cscope 설치 절차이다.
- 시작 메뉴에서 "Cygwin\Cygwin Bash Shell"을 실행시켜 bash 쉘 창을 만든다.
- cscope-15.5 디렉토리에서 다음을 실행시키면 cscope.exe가 c:/cygwin/usr/local/bin/ 디렉토리에 설치된다. ./configure make make install
- 사용법
- cscope는 심볼 참조 정보 생성 기능과 이를 활용하여 스크린상에서의 소스 코드 브라우징 기능을 제공한다.
- cscope는 기본 설정에서는 현재 디렉토리의 C (.c, .h), lex(.l), yacc(.y) 파일만을 검색한다.
- 지정한 파일들만 검색되게 하고자하는 경우에는 cscope 데이터베이스 디렉토리에 "cscope.files" 파일을 생성하여 검색 대상 파일 목록을 저장해둔다. 이 경우, 소스 파일 목록이 변경되면 "cscope.files" 파일을 다시 생성해주어야 한다. c:\cygwin\bin\find . ( -name "*.c" -o -name "*.C" -o -name "*.h" -o -name "*.cc" -o -name "*.cpp" -o -name "*.hpp" -o -name "*.S" -o -name "*.java" ) -print > cscope.files
- C 소스 코드내의 #include 파일도 검색한다. "INCDIR" 파일에 include 디렉토리 경로명을 지정할 수 있다.
- cscope는 검색의 효율성을 높이기 위하여 파일의 심볼 참조 정보를 cscope 데이터베이스 디렉토리내의 "cscope.out"이라는 파일에 저장하며, 실행될 때마다 파일의 내용과 일치하도록 심볼 참조 정보를 갱신한다.
- cscope 데이터베이스 디렉토리 ("cscope.files" 혹은 "cscope.out" 파일이 저장된 디렉토리)는 명령행 옵션으로 지정되지 않으면 현재 디렉토리로 설정된다.
- 다음과 같이 실행해주면 소스 코드를 브라우징할 수 있으며, 소스 코드는 연동되는 vi를 통하여 편집할 수 있다. C:\build>path c:\cygwin\bin;%path% C:\build>c:\cygwin\usr\local\bin\cscope
- cscope 스크린은 윗쪽의 검색 결과 표시 영역과 심볼 입력 필드 영역으로 구분된다. 영역간 전환은 탭 키를 사용한다. 각 영역내에서의 필드간 이동은 위, 아래 방향키로 이동한다. 결과 표시 용역에서 리턴 키를 사용하여 해당 소스 코드를 편집기로 볼 수 있다. cscope 종료시에는 Control-D를 누른다.
Emacs에서의 cscope 사용 방법
- cscope만을 사용하게 되면 여러개의 관련 파일들을 동시에 열어놓고 작업할 수 없으나, Emacs에서 cscope를 사용하면 소스 코드를 브라우징하면서 여러개의 관련 파일들을 동시에 열어놓을 수 있으므로 매우 편리하다.
- 설치 절차
- 윈도우즈에서의 사용 방법을 기준으로 정리하였다.
- 이맥스에서는 cscope 프로그램의 cscope 데이터베이스 생성 기능만을 활용하고 소스 코드 브라우징과 편집 기능은 이맥스의 유저 인터페이스를 활용하고 있으므로, 이전에 소개한대로 cscope가 먼저 설치되어야 한다.
- cscope 배포본내의 cscope/contrib/xcscope/xcscope.el 파일을 site-lisp 디렉토리에 저장한다.
- ~/.emacs 파일(혹은 site-lisp/default.el 파일)에 다음 행을 추가한다. emacs에서 cscope.exe 프로그램을 찾아서 호출할 수 있도록 PATH 환경 변수를 다음과 같이 설정해준다. 또한, cscope 관련 명령이 동작하기 위해서는 cscope minor mode가 동작해야 하므로 기본 설정되는 C, C++, dired 모드가 아닌 모드인 경우 (즉, 자바, HTML 파일등을 방문하는 경우)에는 다음과 같이 해당 모드 훅에 cscope:hook을 추가시켜주면 된다.(require 'xcscope) (setenv "PATH" (concat "c:\\bin;c:\\cygwin\\bin;c:\\cygwin\\usr\\local\\bin;" (getenv "PATH"))) (set-variable 'exec-path (append '("c:\\bin" "c:\\cygwin\\bin" "c:\\cygwin\\usr\\local\\bin") exec-path)) (add-hook 'java-mode-hook (function cscope:hook)) (add-hook 'html-helper-mode-hook (function cscope:hook))
- 동작 방식
- Emacs에서 cscope 명령 사용시, 방문한 파일이 있는 디렉토리 혹은 명령 "C-c s a" (혹은 "M-x cscope-set-initial-directory")에 의해 설정된 경우에는 그 설정된 디렉토리에서 시작하여 차례로 부모 디렉토리들을 검색하여 cscope 데이터베이스 디렉토리("cscope.files" 혹은 "cscope.out" 파일이 저장된 디렉토리)를 찾아서, "cscope.out" 파일을 자동 생성하거나 갱신한다.
- 이맥스 명령
- cscope 관련 명은 "C-s s" 프리픽스(prefix) 키를 사용한다.
- 검색할 심볼은 커서에 있는 심볼이 기본값으로 프롬프트에서 제공되고 다른 심볼을 입력하여 검색할 수도 있다.
- cscope minor mode가 설정된 파일인 경우에는 Cscope 메뉴 항목이 자동으로 추가되므로 메뉴를 통하여 cscope 기능을 사용할 수 있다.
- "C-c s s": 심볼 참조(정의 포함) 검색
- "C-c s d", "C-c s g": 전역 심볼 정의 검색
- "C-c s G": 전역 심볼 정의 검색후 전역 정의 위치로 이동
- "C-c s c": 이 함수를 호출하는 함수 검색
- "C-c s C": 이 함수가 호출하는 함수 검색
- "C-c s t": 문자열 검색
- "C-c s e": egrep 패턴 검색
- "C-c s f": 파일 검색
- "C-c s i": 이 파일을 #include하는 파일 검색
- "C-c s b": *cscope* 버퍼 표시
- "C-c s n": 다음 심볼 검색
- "C-c s p": 이전 심볼 검색
- "C-c s N": 다음 파일 검색
- "C-c s P": 이전 파일 검색
- "C-c s a": cscope 데이터베이스 디렉토리 검색 시작 디렉토리 설정
- "C-c s A": cscope 데이터베이스 디렉토리 검색 시작 디렉토리 해제
댓글 없음:
댓글 쓰기