티스토리 뷰

728x90

C언어를 배우고 실무에 적용하던 무렵 대기업 전자 회사에서 운영체제를 담당하는 한 개발자를 만난 적 있었다. 기반 기술이 있고 경험도 많다고 자신 만만해하던 때였다. 어깨너머로 그의 작업 광경을 구경하는데 내 눈앞에 신기한 모습이 펼쳐졌다. 어찌 보면 가장 원시적이라 할 수 있는 vi 에디터로 프로그램에서 발생한 문제를 찾아 가는데, 이리저리 코드의 호출 그래프를 따라 움직이는 것이 환상적이었다. 뭔가 단축키를 누르는 것 같은데 그 원리는 도통 알 수 없었다. 그 사람을 붙들고 물어보니 CTags란 도구를 활용해서 프로그램을 분석하여 태그 정보를 만들어 놓으면 vi(엄밀히 말하면 vim) 에디터에서 해당 정보를 기반으로 함수나 변수가 정의된 곳으로 이동시켜주는 원리였다. 

 

물론 비주얼 스튜디오나 이클립스를 활용하면 이런 기능은 바로 이용할 수 있다. 그렇지만 통합 개발 환경을 구동시킬 수 없는 환경이거나, 통합 개발 환경없이 간단히 코드를 확인하고 싶을 경우에는 텍스트 편집기에서 관련 기능을 이용하면 최상일 것이다. 그래서 이번 포스팅에서는 노트패드++(NPP)에서 플러그인으로 NppGTags를 설치하고 사용 방법을 다룰까 한다.

 

NppGTags의 설치는 위의 그림과 같이 NPP내에서 플러그인> Plugin Manager 메뉴로 바로 설치할 수도 있고 최신 버전을 찾는다면 아래의 사이트에서 다운로드할 수도 있다.

https://github.com/pnedev/nppgtags

 

깃 허브에 있는 내용을 중심으로 사용법을 번역 및 정리하면 아래와 같다.

 

NppGTags의 모든 기능은 위의 그림과 같이 플러그인> NppGTags 메뉴에서 확인할 수 있으며 자주 사용하는 기능이라면 단축키를 할당해서 사용하면 된다.

위의 그림은 설정>단축키 설정... 메뉴를 선택하고 [Plugin Commands]를 클릭하여 특정 태그의 정의로 이동하는 기능에 [F12] 단축키를 설정한 예제이다.

 

본격적인 사용에 앞서 소스 코드 파서를 확인해야 하는데, 플러그인> NppGTags> Settings 메뉴에서 수행할 수 있다.

 

플러그인을 설치하면 위의그림처럼 3종류의 파서를 확인할 수 있으며 기본 값은 GTags로 C, C++, Java, PHP로 언어가 제한된다는 단점이 있으며, CTags는 대표적인 분석도구답게 수많은 언어 분석을 지원하지만 참조 검색이 제한된다는 단점이 있다. 많은 언어 지원과 참조 검색도 지원하는 pygments 도구가 있지만 이것은 시스템에 파이썬 라이브러리가 있어야 동작하므로 관련 준비가 되어 있다면 사용해도 좋다. 일단 필자의 경우에는 GTags만으로도 충분하므로 기본값으로 진행한다.

 

위의 설정창에서 무시할 하위 폴더(ignore sub-folders)를 지정하면 검색 결과에서 해당 폴더들을 제외할 수 있다. 대표적으로 서브버전 폴더인. svn 등을 제외시키는 데 사용할 수 있다. 라이브러리가 있다면 라이브러리 데이터베이스를 통해서 관리할 수 있다.

 

코드 분석을 시작하려면 태그 정보를 만드는 작업을 먼저 해야 하는데 위의 그림에서 처럼 "Create DataBase"로 GTag 데이터베이스 생성하면 된다. 만들어진 데이터베이스는 "Delete Database"로 삭제할 수 있다.

 

데이터베이스 생성 메뉴를 선택하면 위와 같이 폴더를 선택하는 창이 나오는데 이때 프로젝트의 최상단 폴더를 선택하면 하위 폴더까지 자동적으로 분석한다.

 

창이 사라지면서 하단에 위의 그림과 같은 진행 창이 나오는데 종료될 때까지 대기한다. 

 

분석 작업이 끝나면 앞서 선택했던 폴더에 위의 그림과 같이 GTAGS, GRTAGS, GPATH, NppGTags.cfg 파일들이 생성된다. 여기까지가 준비 과정이다. 만약 다른 프로젝트도 분석 도구를 사용하고 싶으면 위와 같은 방식으로 해당 프로젝트의 최상단 디렉터리를 기준으로 데이터베이스를 생성해 놓으면 NPP에서 현재 편집 중인 파일의 위치를 파악해서 적절한 데이터베이스를 찾아 검색한다.

 

사용법은 간단하다. 앞서 생성한 데이터베이스의 기준 폴더(최상단 폴더)에 속하는 파일을 열면 NppGTags의 플러그인 검색 기능을 사용할 수 있다.

 

위와 같은 검색 기능 중의 하나를 선택하면 플러그인에서 현재 열린 파일의 폴더를 상위로 따라가면서 데이터베이스를 찾기 때문에 데이터베이스만 생성해 놓으면 다른 설정은 필요 없다. 위의 예제는 소스 코드가 아닌 UI 관련 XML 파일을 연 상태에서 business가 있는 파일을 검색한 것이다. 그렇지만, GTags의 매력은 역시 소스 코드 분석에서 드러난다. 이를 위해서 필자의 경우에는 가장 많이 사용하는 "Find Definition, 정의로 이동"과 "Go Back, 돌아가기"에 비주얼 스튜디오에서 사용하는 단축키를 설정해 놓았다.

 

C 소스 코드를 연 상태에서 GNC_OWNER_NONE의 정의를 확인하기 위해서 커서를 둔 상태에서 F12(Find definition)를 누르면 단어가 자동 선택되면서 하단에 소스 코드와 위치가 표시된다. 검색 결과가 한 개라면 해당 위치로 바로 이동하도록 코드를 변경하고 싶은 생각이 들기도 하지만 이 정도도 훌륭하다.

 

이 상태에서 검색 위치를 더블 클릭하면 헤더 파일이 열리고 정의를 확인할 수 있다. 내용 확인이 끝났으면 Ctrl+-(Go Back)를 눌러 원래 소스 코드 위치로 돌아올 수 있다.

 

소스 코드 분석 과정에서 효율성을 높여주는 또 하나의 기능은 특정 변수를 참조하는 모든 곳을 검색하는 것으로 "Find Reference" 메뉴로 수행할 수 있다. 위의 그림은 앞서 정의를 찾아갔던 GNC_OWNER_NONE를 참조하고 있는 모든 코드를 검색한 예제이다. 코드 분석뿐만 아니라 편집기로 직접 개발을 수행한다면 자동 완성(AutoComplete) 기능을 알아두면 생산성도 높이고 오류 가능성도 줄일 수 있다.

 

 

 

 

728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함