C 코드 분석 툴

2011.12.18 20:21

가을의 곰을... 조회 수:11336

Doxygen과 graphviz를 이용한 call graph 생성

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

[출처] http://wlan.egloos.com/10805691

1. 서론

세상에는 다양한 소스분석 도구(툴)들이 존재합니다. gprof같은 프로그램은 실행화일을 실행시키면서 수행과정 중에 거쳐가는 함수들의 목록을 얻을 수 있고, doxygen과 같은 static call graph생성 도구는 가능한 모든 수행 경로를 분석하여 그래프를 그려줍니다[1].
KLDP에도 소스분석에 대한 여러 의견들을 볼 수 있는데요. 어떤 분은 vi와 ctags의 조합으로도 소스 분석을 훌륭하게 할 수 있다고도 하고, source navigator나 source insight같은 GUI 환경이 좋다고도 합니다[2]. [2]는 2000/2001년에 걸쳐 작성된 글이지만, 많은 시사점을 제시해 주는 것 같습니다.
고스톱 오픈 프로젝트[3]를 진행하면서 좋은 레퍼런스를 찾던 중에 PokerTH[5]라는 네트워크 게임과 깔끔한 UI를 지원하는 포커 오픈 소스 게임을 찾게 되었고, 이걸 분석하면 고스톱 개발에 많은 도움이 될 것 같다는 생각이 들더군요. 하지만, 방대한 소스의 양과 한번도 사용해 본적이 없는 STL 기반의 boost 라이브러리를 빈번하게 사용하는 코드는 저를 단 번에 질리게 만들더라구요. 그래서, 위에 언급한 소스분석 도구에 대해 공부하게 된 것이지요.
구글링을 통한 조사 끝에 doxygen과 graphviz를 이용해서 소스코드를 분석해 보기로 결심하였고, 그 결과를 이 글을 통해 여러분과 공유하고자 합니다. 많은 분들이 doxygen의 사용법에 대해 글을 올려주셨지만[4], 저같은 초보자도 한 번에 성공할 수 있는 문서를 만들어 보고자 합니다.

서론이 길었습니다만, Doxygen은 소스코드를 가지고 문서를 만들어 주는 툴입니다. graphviz를 이용하면 부가적으로 class의 상속관계나 함수 호출 경로를 분석할 수 있습니다. 아쉽게도 저는 main에서 시작하는 전체 호출 구조를 얻는 방법은 아직 찾지 못했습니다. C++로 작성된 코드라서 그런 걸까요?


2. Doxygen과 graphviz설치


제 OS는 ubuntu 11.04이고요. doxygen과 graphviz는 Ubuntu Software Center를 통해 설치했습니다. 너무 쉽습니다.
마치 스마트 폰을 사용하듯이... 다른 OS를 사용하시는 분은 별도로 설치방법을 찾아주세요.. 죄송..


3. PokerTH 소스에 대한 문서와 call graph 생성하기

PokerTH의 소스는 [5]에서 받았습니다. 우선 다운 받은 PokerTH를 풀고 src 폴더로 이동하고 아래와 같이 입력합니다.

src $ doxygen -g pokerth.doxy

"pokerth.doxy"는 임의의 화일 이름을 지정해 주시면 됩니다.
이것은 src 폴더를 어떻게 문서로 만들 것인지를 정의해 주는 설정화일입니다. 기본으로 생성되는 화일은 거의 아무런 정보도 주지 않는 아주 보수적인 설정으로 되어 있습니다.
소스코드를 분석하는 사람의 입장에서는 문서를 만드는데 시간이 오래 걸리더라도 가능한 많은 정보를 보고 싶어하기 때문에 주석을 읽어보시면서 가능한 많은 정보를 볼 수 있도록 설정을 수정해 주셔야 합니다.

PROJECT_NAME = PokerTH
PROJECT_NUMBER = 0.1
OUTPUT_DIRECTORY = ./doxygen
CREATE_SUBDIRS = YES
MULTILINE_CPP_IS_BRIEF = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
RECURSIVE = YES
SOURCE_BROWSER = YES
GENERATE_TREEVIEW = YES
HAVE_DOT = YES
UML_LOOK = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
DOT_PATH = /usr/bin/dot
DOT_GRAPH_MAX_NODES = 100

위 내용을 myconfig 라는 이름으로 저장하시고 아래 스크립트를 실행하시면 해당 내용이 설정화일(pokerth.doxy)에 적용됩니다.

cat myconfig |
while read a; do
key=`echo $a | awk '{print 2297}'`
sed -i -e "/^$key/ c\
$a" pokerth.doxy
done


이후

src $ doxygen pokerth.doxy

를 실행하시면 OUTPUT_DIRECTORY로 지정한 ./doxygen 아래에 html과 latex 두 폴더가 생기며 그 아래에 문서들이 들어갑니다.



4. 결론

아직 이걸로 본격적인 소스코드 분석에 들어가지 않아 doxygen과 graphviz이 생성해 준 문서의 유효성에 대해서는 말씀을 못드리겠습니다만, 대충 훑어보면 비주얼이 괜찮습니다. 다음에는 gprof를 사용해 보고 글을 올려볼 계획입니다.

[1] http://en.wikipedia.org/wiki/Call_graph
[2] 소스코드 분석에 왕도는 있다?, http://kldp.org/node/67385
[3] http://code.google.com/p/opengostop/
[4] Doxygen + Graphviz + DoxyComment 소스코드 문서화, http://blog.pages.kr/367
[5] http://www.pokerth.net/
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
95 Best and Free Programming Ebooks with Open Source Licenses 가을의 곰을... 2012.02.12 6998
94 Stanford Univ Lecture : Web Applications file 가을의 곰을... 2012.02.11 5895
93 Mobile Web Application과 Webstore 가을의 곰을... 2012.02.11 6675
92 Libpcap File Format 가을의 곰을... 2012.02.05 12147
91 소프트웨어 특허 실제 사례 분석-4 가을의 곰을... 2012.01.23 7063
90 데스크톱 가상화 시장 뜰까 file 가을의 곰을... 2012.01.19 6737
89 MP3 탄생 배경 2. MP3와 디지털 오디오 3. MP3 압축 원리 4. MPEG의 종류 가을의 곰을... 2012.01.18 7525
88 소프트웨어 특허 실제 사례 분석-3 가을의 곰을... 2012.01.12 6364
87 소프트웨어 특허 실제 사례 분석-2 가을의 곰을... 2012.01.12 6775
86 소프트웨어 특허 실제 사례 분석-1 가을의 곰을... 2012.01.12 7063
85 How to run HelloWorld and tests of cocos2d-x on bada file 가을의 곰을... 2012.01.05 6823
84 자바 SSL 사용법 가을의 곰을... 2011.12.30 8013
83 Apache HttpClient로 https 연결 데이터 받기 가을의 곰을... 2011.12.30 10868
82 libpcap 를 이용한 프로그래밍 가을의 곰을... 2011.12.18 6272
81 소스 분석 툴 ( Linux) tools 가을의 곰을... 2011.12.18 11120
» C 코드 분석 툴 file 가을의 곰을... 2011.12.18 11336
79 [공부] Tcpdump & pcap분석 file 가을의 곰을... 2011.12.08 10687
78 자바 입출력( java stream ) 가을의 곰을... 2011.12.08 6845
77 게임소설 쓰는 법 file 가을의 곰을... 2011.12.04 5572
76 게임소설이란 무엇인가? 위키백과에서 가을의 곰을... 2011.12.04 5870
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED