2012년 5월 15일 화요일

Cscope - 소스 코드 브라우징 도구

출처 : http://blog.deogtae.name/30002201310


소개

  • 홈 페이지: http://cscope.sourceforge.net/
  • C 소스 코드 브라우징 도구 (C++, 자바, 텍스트 파일도 제한적으로 지원)
  • 검색 기능
    • 심볼의 모든 참조
    • 전역 정의
    • 특정 함수에 의해 호출되는 함수들
    • 특정 함수를 호출하는 함수들
    • 텍스트 스트링
    • 정규식 패턴
    • 파일
    • 특정 파일을 포함하는 파일들
  • 설치 절차
    1. 홈 페이지에서 cscope 배포본을 다운로드한다.
    2. 배포본내의 INSTALL 파일을 참조하여 설치한다. 혹은 빌드된 바이너리를 웹에서 검색하여 사용한다. 다음은 윈도우즈에서 cygwin을 설치한 환경하에서의 cscope 설치 절차이다.
    3. 시작 메뉴에서 "Cygwin\Cygwin Bash Shell"을 실행시켜 bash 쉘 창을 만든다.
    4. 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를 사용하면 소스 코드를 브라우징하면서 여러개의 관련 파일들을 동시에 열어놓을 수 있으므로 매우 편리하다.
  • 설치 절차
    1. 윈도우즈에서의 사용 방법을 기준으로 정리하였다.
    2. 이맥스에서는 cscope 프로그램의 cscope 데이터베이스 생성 기능만을 활용하고 소스 코드 브라우징과 편집 기능은 이맥스의 유저 인터페이스를 활용하고 있으므로, 이전에 소개한대로 cscope가 먼저 설치되어야 한다.
    3. cscope 배포본내의 cscope/contrib/xcscope/xcscope.el 파일을 site-lisp 디렉토리에 저장한다.
    4. ~/.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 데이터베이스 디렉토리 검색 시작 디렉토리 해제

댓글 없음:

댓글 쓰기