[lighttpd + php5 + xdebug] PhpStorm 원격 DEBUG & profiling Develop Tip

지난번 PhpStorm 원격 디버깅 블로그 내용과 유사하지만, 좀 더 하위레벨에서 테스트 해 본 것입니다.

일단은 아파치 웹서버 대신 lighttpd을 이용하여 
php5와 xdebug를 모두 소스에서 부터 build하여 설치한 다음,
원격에서 phpStorm을 이용한 디버깅을 해 보겠습니다.

1) 설치

1.1) php5 설치

####################################################################################
# for php5
####################################################################################
if [ ! -e /usr/local/bin/php ];then
        sudo apt-get install libxml2-dev
        wget http://php.net/get/php-5.3.20.tar.gz/from/kr1.php.net/mirror
        mv mirror php-5.3.20.tar.gz
        tar xvfz php-5.3.20.tar.gz
        cd php-5.3.20
                #./configure --enable-fastcgi # in case 5.2.x
                ./configure
                make
                #make test
                sudo make install
        cd ..
        rm -rf php-5.3.20*
fi

1.2) lighttpd 설치

####################################################################################
# for lighttpd 1.4
####################################################################################
if [ ! -e /usr/local/sbin/lighttpd ];then
        sudo apt-get install libpcre3-dev libghc-zlib-dev libbz2-dev
        wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.32.tar.gz
        tar xvfz lighttpd-1.4.32.tar.gz
        cd lighttpd-1.4.32
                ./configure
                make
                sudo make install
        cd ..
        rm -rf lighttpd-1.4.32*
fi


1.3) xdebug 설치

####################################################################################
# for xdebug
####################################################################################
if [ ! -e /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so ];then
        sudo apt-get install autoconf
        wget http://xdebug.org/files/xdebug-2.2.1.tgz
        tar xvfz xdebug-2.2.1.tgz
        cd xdebug-2.2.1
                phpize
                ./configure --enable-xdebug
                make
                #make test
                sudo make install
        cd ..
        rm -rf xdebug* package.xml
fi


1.4) php.ini 파일

다음과 같은 내용의 php.ini 파일을 /usr/local/lib/php.ini 로 만든다.

[PHP]

default_charset = "utf-8"

post_max_size = 1G
upload_max_filesize = 1G
upload_tmp_dir = /utm/log/tmp/
max_execution_time = 0
max_input_time = 1200
memory_limit = 1G
file_uploads = On

cgi.fix_pathinfo = 1

session.save_path = /tmp/admin/
session.cookie_lifetime = 0

extension_dir=/usr/lib/php_extensions/
extension=php_screw.so
extension=uuid.so


; for xdebug
zend_extension=/usr/local/lib/php/extensions/{your_sub_folder}/xdebug.so
xdebug.idekey=phpStorm
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_host=0.0.0.0
xdebug.remote_port=9000

xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=/tmp/xdebug
xdebug.profiler_output_name=cachegrind.out.%t.%p;



1.5) lighttpd.conf 설정 파일

다음 내용을 /usr/local/etc/lighttpd.conf 에 놓는다.

server.port = 880
server.document-root = "/var/www"

static-file.exclude-extensions = (".fcgi", ".php", ".rb", ".inc")
index-file.names = ("index.html")

server.modules = (
"mod_fastcgi",
"mod_rewrite",
"mod_redirect",
"mod_alias",
"mod_access",
)

mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png",
".css" => "text/css"
)

fastcgi.server = (
".php" => ((
"bin-path" => "/usr/local/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 5,
"idle-timeout" => 600,
))
)

혹시 기존에 80등에서 이미 다른 웹서버가 기동되고 있을 수 있으므로, 880 포트로 변경하여 기동시킵니다.


2) 웹 서버 기동

$ sudo /usr/local/sbin/lighttpd -D -f /usr/local/etc/lighttpd.conf

데몬이 아니라 포그라운드로 실행을 시켜야만 phpStorm에서 디버깅이 되었습니다.
(아직 정확한 이유는 모르겠으나 이것 때문에 꼬박 하루를 고생했습니다.)


3) 원격에서 PhpStorm 작동

"Create New Project from Existing source"를 누르고 위와 같은 것을 선택한 다음 "Next"를 누릅니다.

프로젝트 이름을 넣고 다음.

새로운 연결을 해 봅니다. 다음,

위와 같은 식으로 넣습니다. 하단의 URL에는 만약 다른 포트라면, "http://u10:880" 와 같은 식으로 설정합니다.

하단의 다큐먼트 루트 혹은 그 하위 폴더를 선택하고, 상단의 프로젝트 루트를 지정합니다. 해당 폴더의 아이콘이 phpStorm 아이콘으로 변경됩니다. 다음,

root 경로가 아닐 경우, 하위 경로를 지정하구요,

툴바의 설정을 눌러,

위와 같이 php 디버그 정보가 있음을 확인합니다. (디폴트입니다)

위와 같이 실행할 대상을 설정하기 위하여 "Edit Configuration..."을 합니다.

일단 원격 php 실행을 위해서 위와 같이 "PHP Web Application"을 추가합니다.

만약 "PHP Remote debug"를 선택하면 IDE Key를 입력하게 되는데,
1.4에서 설정한, php.ini 파일의
xdebug.idekey=phpStorm
phpStorm 이라는 키를 넣어주고,
해당 php에 브레이킹 포인트를 설정한 다음,
웹 페이지를 수행할 때, "http://u10:880/frame_config.php?XDEBUG_SESSION_START=phpStorm" 이라고 브라우저에서
키를 지정해 주면 디버깅이 됩니다.

우선 php 웹 응용을 디버깅을 하기 위해서 계속하면,

위와 같이 나온 상태에서, 서버에


해당 정보를 넣고, OK

 
원격 자바스크립트도 디버깅하려면 위와같이, 설정하고 추가,


항상 로컬과 원격 URL 매핑을 일치시켜 줍니다.


그 다음이 중요한데, 위와 같이 "Start Listen PHP Debug Connection"을 수행하여 전화기가 연결되도록 해 놓습니다.


이제 원격 디버깅을 위해 시작해 놓은 PHP 코드를 열어 브레이킹 포인트를 설정합니다.


그 다음 디버깅을 시작하면,


위와 같이 중단점 및 php 변수를 확인하면서 디버깅을 할 수 있습니다.
(그냥 에디터로 작업할 때보다 환상적이지 않습니까?)


또한 자바스크립트 디버깅을 위하여 해당 js에 브레이킹 포인트를 걸어놓고,


웹 브라우저가 해당 JS 를 수행하려고 할 때, 원격 js 코스에 멈춥니다.


왜 PhpStorm이 WebStorm의 모든 기능위에 PHP를 얹었는지 대충 이해가 갔습니다.


PS.  더 편한 PHP 디버깅 방법~


위와 같이 PHP 원격 디버깅을 선택하고,
1.4에서 설정한, php.ini 파일의
xdebug.idekey=phpStorm
phpStorm 이라는 키를 위의 IDE Key에 넣습니다.

또한,

사파리 브라우저에서 (다른 브라우저 플러그인도 쉽게 검색가능합니다),

해당 플러그인 다운로드에서 최신 버전을 다운받아 파인더에서 실행하면 ...

위와 같이 나옵니다. 위에서도 동일한 IDE Key를 넣어줍니다.

이제 원격 PHP 디버깅을 켜 놓은 상태에서,

위와 같이 좌측 상단 벌레를 눌러 '1' 표시가 되어 있으면 해당 IDE 키가 자동으로 활성화되어,
해당 세션의 php를 디버깅 할 수 있습니다. (대신 브레이킹 포인트가 지정되어 있어야 합니다)


4) 


해당 URL을 웹브라우저에서 호출할 때,

"?XDEBUG_PROFILE" 을 덧 붙입니다.
(1.4 에서의 xdebug.profiler_enable_trigger=1 이 설정된 경우, 아니면 모든 경우에 프로파일을 하게되는 경우 너무 많아 질 수 있습니다.)

예) http://u10:880/phpdebug/index.php?XDEBUG_PROFILE

그러면 해당 폴더 (1.4에서 설정한
xdebug.profiler_output_dir=/tmp/xdebug
)에 , 다음과 같은 파일이 생성됩니다.

cachegrind.out.1357707861.831

이것을 kcachegrind 혹은 wincachegrind 로 파일을 열어보면 됩니다.
일일이 타임스탬프를 걸어 확인할 필요 없겠지요?

OSX에서는
$ sudo port install kcachegrind
로 설치되었습니다.

OSX의 터미널에서 
$ kcachegrind &
로 실행을 시키면 폰트가 너무 커서 확인에 어려움이 있습니다.

이것을 수정하려면,

$ vi ~/.kde/share/config/kdeglobals
[General]
fixed=Monaco,9,-1,5,50,0,0,0,0,0
font=Geneva,9,-1,5,50,0,0,0,0,0
menuFont=Geneva,9,-1,5,50,0,0,0,0,0
taskbarFont=Geneva,8,-1,5,50,0,0,0,0,0
toolBarFont=Geneva,8,-1,5,50,0,0,0,0,0
[WM]
activeFont=Geneva,9,-1,5,50,0,0,0,0,0
를 추가하면 됩니다.

(연재는 호출되는 함수가 없어서...)


어느분께는 도움이 되셨기를...

핑백

  • XDebug (voca – by no means) | BUYWORKSELL 2013-07-22 10:41:12 #

    ... %97%90%EC%84%9C-xdebug-%EC%84%A4%EC%A0%95%EA%B3%BC-%ED%85%8C%EC%8A%A4%ED%8A%B8/ http://mcchae.egloos.com/10977535 http://blog.jetbrains.com/webide/2011/02/zero-configuration-debugging-with- ... more

덧글

  • 아흑.. 2013/03/22 12:00 # 삭제 답글

    너무 어렵네요...
    맥으로 coda로만 코딩하다가 Git 도입 하면서 로컬개발 환경이 가능하게 되서 IDE를 갈아타려고 하는데
    php개발을 하다 보니 이클립스보단 phpstorm 이 더 좋을것 같아서 구입하려고 하는데...
    쉽지가 않네요 ㅎㅎ
  • 지훈현서아빠 2013/03/22 15:37 #

    제가 맥으로만 했을 때는 잘 되던 phpStorm 디버깅이 윈도우에는 문제가 있네요...
    암튼 JetBrains의 IDE는 이클립스와 같은 JAVA로 만들어진 IDE 임에도 불구하고
    상당히 좋은 퀄러티를 가지고 있습니다.
    도움이 되셨으면 좋겠습니다~~
댓글 입력 영역

구글애드텍스트