2014년 7월 16일 수요일

EFL : Clouseau - EFL 어플리케이션 분석을 위한 툴

EFL 어플리케이션을 작성하다보면 각각의 객체가 어떠한 속성을 가지고 있는지 궁금할 때가 있습니다.

물론 printf같은 고전적인 방식이나 gdb와 같은 디버깅 툴을 이용하는 방식도 있겠지만 EFL 프로젝트에서 제공하는 방법이 있어서 소개합니다.

바로 Clouseau라는 툴 입니다.

일단 설치 방법을 설명 하겠습니다.


먼저 아래 명령을 통해 소스를 다운로드 받습니다.

git clone https://git.enlightenment.org/tools/clouseau.git/


다운로드 받으면 폴더 내에 INSTALL 파일이 있습니다.

그대로 따라합니다.

jinsol@jinsol:~/efl/tools/clouseau$ ./configure

...

jinsol@jinsol:~/efl/tools/clouseau$ make

...

jinsol@jinsol:~/efl/tools/clouseau$ make install

이 과정을 거치면 컴파일이 되고 실행파일을 바로 실행할 수 있는 상태가 됩니다.

이 과정까지 오셨으면 efl은 컴파일 elementary_test는 미리 실행 해보셨을 테니, elementary_test를 분석하는 화면을 띄워보겠습니다.
(만약 안되었다면 천재태지님 블로그 http://seoz.egloos.com/3936054를 참조해 주세요.)

먼저 터미널을 열어

jinsol@jinsol:~$ clouseau_start elementary_test

명령을 통해 elementary_test를 실행시켜 봅니다.



이와같이 평소에 elementary_test를 실행하듯이 동일한 화면이 뜨는 것을 볼 수 있습니다.

(내부적인 구현이 어떻게 이루어져 있는지는 소스를 안 봐서 모르겠으나, clouseau_start가 elementary_test를 child process로 fork 시켜 child process의 정보를 어떻게든?! 가져와 소켓 통신을 통해 연결 되는 것으로 생각됩니다.)

이제 새로운 터미널을열어

jinsol@jinsol:~/efl/tools/clouseau$ clouseau_client

명령을통해 clouseau_client를 실행 시킵니다.

 

이와 같은 화면이  뜨는데, 우리는 한 컴퓨터의 다른 프로세스에 접근하므로 기본 설정 되어있는 127.0.0.1 loopback IP를 그대로 두고 OK를 선택합니다.




그러면 이와 같은 화면이 나타납니다. 

좌측 상단의 Select App 버튼을 눌러 elementary_test를 눌러봅니다. 오른편의 숫자는 해당 프로세스의 pid 입니다.