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 입니다.



프로세스가 선택 되면 위와 같이 각 개체에 대한 여러가지 정보를 볼 수 있으며, 다만 아쉬운 점은 정보가 실시간으로 업데이트 되는것이 아닌, 놔측 상단의 Reload가 눌려야 업데이트 되는점이 있네요.

앞으로 EFL이 좀 더 대충화되면 더 많은 기능이 들어갈 수 있지 않을까 싶습니다.

이론적으로는 다른 디바이스에도 접속이 될 것으로 생각되는데, 실제로 해보진 않아서 확실하진않습니다. 다음에 기회가 되면 테스트 해서 업데이트 하도록 하겠습니다. 그럼 이만~~

댓글 1개:

  1. 안녕하세요? 좋은자료 감사합니다. 다른분들 위해 내용을 좀 보강하면,
    ---
    jinsol@jinsol:~$ clouseau_start elementary_test
    명령을 통해 elementary_test를 실행시켜 봅니다
    ---
    위 순간에 clouseaur 가 'elementary_test' app 실행 직전에 LD_PRELOAD 를 통해 closeaur_preload.so 를 선탑재 시키는데, 이 안에는 Clouseau_preload.c 에 적힌것 처럼 elm_init(), ecore_main_loop_begin(), evas_object_new(), evas_object_free() 를 *재정의* 합니다. 재정의된 symbol 은 elmentary_test 가 실행될때 먼저 해당 symbol 이 불려지고, 이 안에서 ecore socket client 를 구동시켜 Clouseau UI 쪽 ecore server 와 연결되는 방식입니다.

    답글삭제