본문 바로가기
Engineer/프로그램 사용법

Doxygen, 소스코드 분석 툴 - 구조도 쉽게 그리기

by _제이빈_ 2020. 3. 12.

소스코드 분석/문서 출력 툴, 독시젠(Doxygen) 설치 및 사용방법에 대한 게시글입니다.

 

 

Doxygen, 독시젠 소스코드 분석 툴

 

    독시젠은 코드 상에 적힌 주석들을 정리하여 문서를 만들어내는 프로그램이다. C ++ 소스에서 문서를 생성하는 표준 도구이지만 널리 사용되는 다른 프로그래밍 언어(C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D)도 지원한다.

    코드를 작성 시 자세한 주석(독시젠에 맞는 주석)을 기입하면, 후에 따로 문서를 만들 필요 없이 주석을 기반으로 독시젠이 자동으로 문서를 만들어 준다. 따라서 따로 프로그램의 구조를 정리한 문서 관리를 따로 할 필요가 없고, 코드만 보고도 이해하기가 쉬워진다. 뿐만 아니라, 코드 간 호출구조를 분석해 구조도도 도시하여 처음 접하는 소스코드를 이해하는데 도움이 될 수 있다.

 

 

 설치방법 (Windows)

 

먼저 사이트(링크)에 접속해 독시젠을 다운로드한다. 리눅스나, MaxOS용 독시젠도 있으니 사용환경에 따라 다운 받도록 한다.

 

<설치파일 다운로드>

 

 

 

다른 프로그램들과 마찬가지로, 특별한 사항이 없으면 Next> 버튼을 이용해 설치를 완료한다.

 

<e설치파일 실행 및 설치>

 

 

 

 

설치를 완료하면 Doxywizard 파일이 설치되며, 이를 실행하면 <그림6>과 같은 프로그램이 실행된다.

 

Doxywizard 아이콘

 

Doxywizard  실행화면

 

 

또한 UML 다이아그램을 그리기 위해 Graphviz도 설치(링크)해야한다. Stable 버전을 설치하도록 한다.

 

Graphvis 다운로드 페이지

 

 설정 및 사용방법

 

(1/8) Wizard 탭의 Project

 

디렉토리 명이 한글로 되어 있으면 실행이 안 될 수 있으므로. 폴더 명에 주의 (파일 내 한글은 지원되도록 하는 설정이 있음)

 

 

① 프로젝트 디렉토리 입력 (소스코드가 아닌 프로젝트 폴더)

② 프로젝트의 이름 및 버전 등의 정보를 입력

③ 소스코드 디렉토리 입력 (Scan recursively : 하위폴더 포함 스캔)

④ 아웃풋(문서) 폴더 입력

 

 

 

(2/8) Wizard 탭의 Mode

 

 

① 문서에 출력되는 함수 명에 링크를 걸도록 설정

② 대상 프로젝트(소스코드)의 언어를 선택

 

 

(3/8) Wizard 탭의 Ouput

 

 

① 문서에 네비게이션 패널을 표시 (탐색기 기능)

 

 

(4/8) Wizard 탭의 Diagram

 

소스코드 분석시 큰 도움이 되는 코드 간 호출함수의 관계를 도시해 준다.

 

 

① 앞서 설치한 Graphviz를 이용해 호출 함수 등을 도시

 

 

 

(5/8) Expert 탭의 Project

 

① 한글 지원을 위해 인코딩 설정

② 출력 시 한글 지원을 위한 언어 설정

③ 상세정보 표시 및 상속된 모든 멤버를 표시

 

 

 

(6/8) Expert 탭의 Build

 

 

① 소스코드 모든 요소와 private 멤버 모두 문서화 대상으로 설정

② Static 멤버 문서화 대상으로 설정

 

 

(7/8) Expert 탭의 Source Browser

 

 

① 함수 설명에 코드를 보여줌

 

(8/8) Expert 탭의 Dot

 

 

① 클래스 상속구조도를 그림

DOT_NUM_THREADS를 조절해 구동시간을 단축시킬 수 있음

② UML식으로 그림

③ dot_path 지정 (C:\Program Files\graphviz\bin)

④ 소스코드를 어느 깊이까지 분석할 건지 설정

 

 

 독시젠을 구동

 

지정한 아웃풋 디렉토리에서 아래와 같은 html문서를 확인 할 수 있다.

 

 

 

반응형

댓글