물론 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이 좀 더 대충화되면 더 많은 기능이 들어갈 수 있지 않을까 싶습니다.
이론적으로는 다른 디바이스에도 접속이 될 것으로 생각되는데, 실제로 해보진 않아서 확실하진않습니다. 다음에 기회가 되면 테스트 해서 업데이트 하도록 하겠습니다. 그럼 이만~~
안녕하세요? 좋은자료 감사합니다. 다른분들 위해 내용을 좀 보강하면,
답글삭제---
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 와 연결되는 방식입니다.