'debug'에 해당되는 글 2건

  1. 2009.06.09 XAMPP + Eclipse 이용한 PHP 디버깅 (XDebug) (1)
  2. 2009.03.06 PHPEclipse 환경에서 PHP 리모트 디버깅하기 (5)
2009.06.09 16:10

XAMPP + Eclipse 이용한 PHP 디버깅 (XDebug)

XAMPP 에 포함되어 있는 XDebug 를 이용해서 이클립스에서 편하게 디버깅 할 수 있도록 설정하는 방법입니다. 설정이 그리 어렵지 않지만 몇가지 문제때문에 어려워하는 분들이 계실까봐 글을 남깁니다.

보통 웹프로그래밍을 할때에는 작성 후 브라우저를 통해 결과를 확인하는 작업을 하게 되는데, 이클립스를 통해 디버깅을 하게되면 이클립스 하단에 바로 결과값이 나와 개발의 효율과 편의를 도모할 수 있습니다.
단, XDebug 는 ZendOptimizer 와 함께 사용할 수 없습니다. 개발을 위해 주로 로컬 서버에서만 사용할 목적이기 때문에 Zend 를 사용 못하는건 그리 큰 문제가 되지 않으리라 생각됩니다.

XAMPP 는 현재 1.7.1 버전까지 나와 있으며 XAMPP 다운로드 사이트에서 받을 수 있습니다. (해당 페이지에서 자신의 OS 에 맞는 버전을 선택해서 설치하면 됩니다. 설치버전/무설치버전/무설치,무설정 버전을 골라 받으세요.)

※ 이 글은 디버깅 설정 방법이 목적으므로, XAMPP 설치나 php.ini 설정 방법 등 자세한건 다루지 않습니다.
※ 아래 예에서 경로 입력시 각자 자신이 설치한 경로에 맞게 수정해서 설정하시기 바랍니다.

  1. php.ini 파일을 열어 설정을 변경해야 합니다. (중요!)
    extension 설정하는 부분에서 php_xdebug.dll 이 있는데 혹시 세미콜론(;)을 제거해서 로드하신 분은 앞에 세미콜론을 붙여주세요. (주석처리 하여 사용하지 않는것입니다.)

    ;extension=php_xdebug.dll


    php.ini 파일 끝 부분에 위치한 Zend 와 XDebug 설정을 찾아 아래처럼 바꿔줍니다.

    [Zend]
    ;zend_extension_ts = "D:\Server\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"
    ;zend_extension_manager.optimizer_ts = "D:\Server\xampp\php\zendOptimizer\lib\Optimizer"
    ;zend_optimizer.enable_loader = 0
    ;zend_optimizer.optimization_level=15
    ;zend_optimizer.license_path =


    [XDebug]
    ;; Only Zend OR (!) XDebug
    zend_extension_ts="D:\Server\xampp\php\ext\php_xdebug.dll"
    xdebug.remote_enable=true
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000

    ;xdebug.remote_handler=dbgp
    ;xdebug.profiler_enable=1
    ;xdebug.profiler_output_dir="D:\Server\xampp\tmp"


    ※ XDebug 에서 프로파일링을 사용하려면 아래 xdebug.profiler_* 의 앞에 세미콜론을 없애고 경로를 올바르게 지정하면 됩니다.
     

  2. eclipse 에서 디버깅 설정을 해준다.
    1. 'Run > External Tools > External Tools Configurations...' 선택

       
    2. 'Program' 을 선택, 더블클릭 하거나, 화면 왼쪽 상단에
       새로 추가 아이콘을 선택.

      아래에서 경로는 PHP 가 설치된 폴더를 선택하면 됩니다.

      Location : D:\Server\xampp\php\php.exe
      Arguments
      : -f "${resource_loc}" -c "D:\Server\xampp\php\php.ini"


      클릭하면 더 크게 볼 수 있습니다.
       

쉽게 설정이 완료되었습니다.
Run 버튼을 눌러 실행해보면 화면 하단부 'Console' 창에 결과가 나옵니다.

※ 주의할점은 프로젝트에 포함된 파일이 아니라면 디버깅시 이클립스에서 오류가 납니다. =_=


아래는 일부러 오류를 만들어 디버깅 한 장면 입니다.

디버깅한 장면



HowTo Debug PHP on XAMPP with Eclipse using PDT (recommended)

You need:

  • Eclipse 3.3
  • PDT
  • Zenddebugger
  • Web Standard Tools
  • XAMPP


Zend Debugger installation instructions
---------------------------------------

1. Locate ZendDebugger.so or ZendDebugger.dll file that is compiled for the
   correct version of PHP (4.3.x, 4.4.x, 5.0.x, 5.1.x, 5.2.x) in the
   appropriate directory.

2. Add the following line to the php.ini file under [DEBUGGER] tag:
   Linux and Mac OS X:     zend_extension=/full/path/to/ZendDebugger.so
   Windows:                zend_extension_ts=/full/path/to/ZendDebugger.dll
   Windows non-tread safe: zend_extension=/full/path/to/ZendDebugger.dll

   (*) the windows non-thread safe is used only with Zend Core 2.0

3. Add the following lines to the php.ini file:
   zend_debugger.allow_hosts=<ip_addresses>
   zend_debugger.expose_remotely=always

4. Place dummy.php file in the document root directory.

5. Restart web server

6. Example for php.ini

[DEBUGGER]
zend_extension_ts=D:\workspace\projekt\XAMPP\php\ZendDebugger.dll
zend_debugger.allow_hosts=127.0.0.1/192.168.1.100
zend_debugger.expose_remotely=always

  • Check if phpinfo(); outputs something about the zenddebugger.
  • Install PDT following the instructions on the eclipse project page.
  • Open Debug Dialog in Eclipse and make a new configuration for PHP Web Page similar to this one

 

  • Debugging using the internal browser should now work.
  • For external Browsers open Preferences->General->Webbrowser and add Firefox and Internet Explorer
  • Switch to the desired browser at "Window"->"Web Browser" and start a debug session, the external browser should now open



HowTo Debug PHP on XAMPP with Eclipse using PHPeclipse

What you need

(The versions in brackets has been used for this HowTo)

  • Eclipse 3.2 (3.2.1)
  • PHPEclipse-Plugin 1.1.9 ( CVS-Snapshot net.sourceforge.phpeclipse_1.1.9.CVS-20060920.bin.dist.zip)
  • DBG 2.13.1 (dbg-2.13.1-win32.zip)
  • XAMPP 1.5.2 (xampp-win32-1.5.2.zip)

PHPEclipse Version 1.1.8 will only work with Eclipse 3.1
DBG is only avaible freely for PHP Versions up to 5.1.2 therefore an older XAMPP with the proper Version is used.

Where to get it

The proper PHPEclipse, DBG, XAMPP installation files can also be downloaded from Link2 [ file://Link2/software/PHP ]

Install xampp and dbg

  • Extract the xampp-files
  • Extract the DBG.
  • Make a new directory at xampp/apache/bin/ named extensions
  • Copy php_dbg.dll-5.1.2 to xampp/php/ext/ and rename it to php_dbg.dll
  • Open the xampp/apache/bin/php.ini for editing
  • add "extension=php_dbg.dll" to the dynamic extension section
  • comment out the zend-conguration complety (should be at the end of php.ini)
  • add the following dbg-config to the end of php.ini so the debugger will be enabled

[dbg]
debugger.enabled = On

  • Create a info.php at xampp/htdocs with the following content:

<?php
phpinfo();
?>

  • open http://127.0.0.1/info.php in you browser and check if there is a dbg section in the output with "debugger.enabled On"
  • If yes everything is fine and the debugger should work

Install PHPEclipse and set up a PHP-Project

This is a slighty changed Version of [5]

  • Extract the PHPEclipse and copy the files to your local eclipse
  • File->New->Project... and select PHP Project
  • deselect "Use default location" and choose a path at pathto/xampp/htdocs/ e.g. pathto/xampp/htdocs/php
  • Create a new PHP File (e.g. test.php) in this Project and add this example code

<?php
$msg = "This is a message";
$aThings = array('one', 'two', 'three');
foreach ($aThings as $value) {
print $msg . ' - ' . $value . ' ';
}
?>

  • Go to "Debug..." and set up a new Config at "PHP DBG Script"
  • Choose the "php enviroment" tab and select the pathto/xampp/php/php.exe as intepreter, select "remote debugging" and deselect "Open with DBGSession...".
  • Now start this Debug-Configuration and look in the debug-view which port is set (e.g. PHP Debugger at localhost:10001)
  • Set a breakpoint and open "http://localhost/php/test.php?DBGSESSID=1@localhost:10001" with your browser
  • Switch back to Eclipse and look of Eclipse stopped at you breakpoint
  • Voilà. That's all.
  • Note: It's not possible to debug a php file which is included by a symbolic link in the eclipse workspace. That means it's best to put a project inside apache's public dir and add all the php files here you want to debug. Sometimes the debugger does not stop at breakpoints. There are still some bugs in it. A possible workaround which is working for me is to put a DebugBreak(); statement in the code instead of a breakpoint. Another thing is the DBGSESSID in the URL. If it does not work properly change the ID for each debug session. (simply count it up)

Debugging Mediawiki

  • Create new PHP-Project, but deselect the "Use default location" and choose your wikipath (e.g. C:\xampp\htdocs\wiki
  • Start the debugging session with the index.php file (e.g. http://127.0.0.1/wiki/index.php?DBGSESSID=1@localhost:10001). Breakpoints in other php-files used in Mediawiki will be recognized.

출처 : http://smwforum.ontoprise.com/

Trackback 6 Comment 1
  1. Favicon of https://blog.pages.kr 날으는물고기 2009.06.09 16:13 신고 address edit & del reply

    XAMPP 위키백과 : http://ko.wikipedia.org/wiki/XAMPP

2009.03.06 15:52

PHPEclipse 환경에서 PHP 리모트 디버깅하기

Zend Studio를 사용하면 서버상에서 돌아가는 php를 리모트 디버깅할 수 있지만, 이넘은 유료인데다가 지금까지 애지중지 사용하고 있는 Eclipse를 버려야한다는 문제가 있어서 - 아무래도 Eclipse가 Zend Studio보다는 내 스타일이다 - 어떻게든 Eclipse 내에서 리모트 디버깅을 시도해보고 있다.

일단 ibm의 developerWorks[링크]에서 증거사진을 발견.

Full PHP browser output

이 환경을 만들기 위해 사용했다는 세팅을 그대로 따라해보았다. 참, 개발환경은 PC(Windows XP)에서 Eclipse 3.1.1을 사용중이며, 웹서버에는 리눅스 Fedora Core 4 위에 apache 2.0.55와 PHP 5.0.5를 깔아서 쓰고 있다.

1. php 구동서버에 디버거모듈 설치

- http://dd.cron.ru/dbg/downloads.php 에서 서버환경에 맞는 .so나 .dll을 받아 설치

- http://dd.cron.ru/dbg/installation.php 의 설명에 따라 phpinfo()에서 아래 화면처럼 with DBG 어쩌구 하는 문장이 나올때까지 삽질 (참고: eAccelerator는 disable시킨 상태였음. 두 모듈은 함께 사용할 수 없다)

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.0.5, Copyright (c) 1998-2004 Zend Technologies
    with eAccelerator v0.9.2a, Copyright (c) 2004-2005 eAccelerator, by eAccelerator
    with DBG v2.11.32, (C) 2000,2005, by Dmitri Dmitrienko

- PHPEclipse에 내장된 디버거 모듈은 DBG가 사용하는 기본포트인 7869가 아니라 10001번 포트를 사용하므로 php.ini 설정을 다음과 같이 수정

extension="/usr/local/php/lib/php/extensions/dbg.so-5.0.3" (위치에 맞게 변경)
[debugger]
debugger.enabled=on
debugger.profiler_enabled=on
debugger.hosts_allow=ALL
;debugger.hosts_deny=ALL
debugger.ports=10001, 10000/16

-재미있는 사실은, 이렇게 10001번 포트를 지정한다고 해도 apache(php)가 10001번에 LISTEN하고 있지 않는다는 사실. DBG 디버거는 소켓 서버가 아니라 소켓 클라이언트로 동작한다. (소켓서버로 동작하는 자바 디버깅 플랫폼과는 정 반대) 조금 뒤에 설치할 PHPEclipse가 PC에서 소켓 서버로 동작하게 된다.

-사정이 이렇다보니, 서버가 IDC에 나가있고 작업시에는 PC에서 VPN 등을 이용해서 서버에 접속하는 식의 네트워크 구성 위에서는 이런 디버깅 방식을 사용하기 어려울 것 같다.

2. PHPEclipse 설치

-[sourceforge 링크] 에서 올해 1월 6일에 나온 PHPEclipse 최신본을 다운로드하여 설치

-새로운 버전을 인식하도록 eclipse를 -clean 옵션을 주어 실행시킴

3. PHP parser 설치

-PHPEclipse는 PHP 파서가 아니므로 PC에서 돌아가는 PHP 파서가 필요

-PHP만 별도로 깔기 귀찮아서 XAMPP 배포본으로 깔아버렸다. apache나 mysql이 PC 켜질때마다 서비스로 뜨면 무거워지니까 서비스로는 설정하지 않았음.

4. PHPEclipse 설정

-자세한 내용은 대충 [링크]를 참조. 앞에 있던 developerWorks의 [링크]에도 관련내용이 들어있다.

-디버깅하고 싶은 PHP파일 내에 breakpoint를 걸어주어야 하는데, 원하는 위치에 debugbreak(); 를 넣어주면 된다. 샘플은 다음과 같음. (안타깝게도 Eclipse 내에서 설정한 breakpoint는 아직 안먹는거 같다)

<?
$i = 0;
$j = 10;
debugbreak();

print("$i + $j = " . ($i + $j));
?>

-다음과 같이 세군데만 설정해주면 된다.

1) Run > Debug를 눌러 새로운 디버깅 항목을 생성. File 항목은 프로젝트에 대한 상대경로로 입력.

 

2) Environment 탭을 눌러 Interpreter에 아까 설치한 PHP 파서의 위치를 잡아줌

3) 가장 중요한 탭은 Environment 아래의 Remote Debug 탭인데, 다음과 같이 설정.

5. 디버깅

-방금 생성한 Debug 항목을 실행시키고 Debug 퍼스펙티브로 전환. 이 상태에서는 PHPEclipse 내의 디버거 모듈이 10001번 포트에 LISTEN하면서 서버가 접속해주기를 기다리게 됨. 다음과 같은 화면 나옴.

-브라우저에 디버깅할 URL을 적고 엔터. http://서버주소/PHP주소?DBGSESSID=1@PC주소:10001. PHP서버는 debugbreak() 문을 만나 실행을 중단하고 제어권을 디버거에게 넘기므로, 브라우저는 출력되는 내용 없이 빈 창을 보여주게 된다.



-그와 동시에, 이클립스 디버거가 동작하며 다음과 같은 화면을 볼 수 있게 된다. 확인결과 step over나 step into같은 기능들도 정상적으로 동작함을 확인할 수 있었다.




6. 마치며

훌륭한 오픈소스 IDE이자 플랫폼인 이클립스에서 PHP의 리모트 디버깅 기능을 사용할 수 있다는건 행운이다. 그러나, 아직 DBG와 PHPEclipse 프로젝트를 결합한 리모트 디버깅은 다음과 같은 한계를 갖고 있다.

-이클립스 IDE 내에서 설정한 breakpoint가 먹지 않는다.

-서버가 PC로 소켓 연결을 맺는 방식이라 방화벽 환경에서는 제대로 돌리기 어려워 보인다. (뭐 서버에 Xwindow 띄워놓고 거기에서 이클립스를 돌린다면야... ^^)

-환경설정하기가 복잡해서, 아예 환경을 구축한 이후라면 모를까 신규환경에서는 차라리 print_r로 찍어보는 편이 속편할것 같다. -_-

그래도, print_r로 일일이 변수값 찍어보면서 디버깅할 수 없다는 자존심을 갖고있는 분들이라면... 조심스럽게 추천 한표 꾹. 아직 실전에서 대놓고 사용할 수 있을 만큼 편하지는 않지만 말이다. ^^


출처 : http://tong.nate.com/heonkyujin/

 

디버깅

PHP로 디버깅을 사용하려면 웹 서버가 디버깅 기호(symbol)를 제공하도록 설정됐어야 하고 디비거가 연결을 할 수 있어야 하고 디버깅 정보를 가져야 하고 실행 흐름을 제어할 수 있어야 한다. 또한 서버에 연결할 수 있는 클라이언트가 있어야 한다. PDT가 바로 그 클라이언트다. 그리고 PDT가 지원하는 디버거 중 하나가 젠드 디버거(Zend Debugger)다. 젠드는 PHP의 주 공헌자고 PDT의 주 공헌자이기도 하다.

젠드 디버거 설치하기

PDT를 위해 젠드 디버거를 설치하는 데 이클립스의 소프트웨어 업데이트 기능을 사용할 수 있다. 이는 이클립스 플러그인으로 PDT를 설치하는 것과 같은 방법을 사용하면 된다. 다른 점은 업데이트 사이트가 http://downloads.zend.com/pdt라는 것 뿐이다.

서버에 젠드 디버거를 설치하려면 몇 가지 단계를 거쳐야 한다. 먼저 다운로드해야 한다(참고자료를 보자). 그리고 나서 이를 PHP 확장 디렉터리에 추가하고 php.ini 파일을 설정하여 확장 기능을 사용할 수 있게 해야 한다(호환되지 않는 확장은 쓸 수 없게 해야 한다). 클라이언트에 실제 디버깅 정보를 제공할 dummy.php라는 스크립트가 함께 딸려올 것이다. 서버를 구성하는 더 자세한 방법은 참고자료를 참조하기 바란다. 두 가지를 모두 갖게 되면 PDT 내에서 디버깅을 할 수 있다.


PDT를 위한 디버깅

PDT에 중단점을 설정하려면 코드에서 한 행을 골라 마우스 오른쪽 버튼을 클릭하고 Toggle Breakpoints를 선택한다.


그림 32. 중단점 지정
중단점 지정

디버깅을 시작하려면 PHP Explorer의 스크립트를 마우스 오른쪽 버튼으로 클릭하고 Debug As > PHP Web Page를 선택한다.


그림 33. PHP 웹 페이지로 디버그하기
PHP 웹 페이지로 디버그하기

바로 PHP Debugging 퍼스펙티브로 전환해야 한다. 아래 그림 같은 디버깅 뷰를 볼 수 있어야 한다.


그림 34. PHP 디버깅 퍼스펙티브
PHP 디버깅 퍼스펙티브

이제 코드 전체를 살펴보고 변수를 검사한다.


그림 35. 로컬 변수 조사하기
로컬 변수 조사하기

자바 개발에 이클립스를 사용한다면 이 모든 것에 익숙할 것이다. 자바 개발에서 사용하는 디버깅 기능 세트와 같기 때문이다. 이는 분명 강력한 디버거로 생산성을 높일 수 있다.

출처 : http://www.ibm.com/developerworks/kr/library/tutorial//os-eclipse-europa2/section7.html


Trackback 0 Comment 5
  1. hnapedro 2009.03.27 12:03 address edit & del reply

    잘읽었습니다.
    그런데, 아래 링크가 안되는군요?

    4. PHPEclipse 설정

    -자세한 내용은 대충 [링크]를 참조. 앞에 있던 developerWorks의 [링크]에도 관련내용이 들어있다.

    • developerWorks 2009.03.30 15:48 address edit & del

      관련 링크주소가 이거 인것 같네요.

      http://www.ibm.com/developerworks/opensource/library/os-debug/

  2. nowdev 2009.04.13 20:17 address edit & del reply

    Eclipse에 Tomcat Server플러그인 설치하기
    http://wiki.javajigi.net/pages/viewpage.action?pageId=165

  3. nam 2009.06.06 23:56 address edit & del reply

    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize=256M
    -framework
    plugins\org.eclipse.osgi_3.4.0.v20080605-1900.jar //이부분은 기존것 사용
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xverify:none
    -XX:+UseParallelGC
    -XX:PermSize=64M
    -XX:MaxPermSize=128M
    -XX:MaxNewSize=64M
    -XX:NewSize=64M
    -Xms128m
    -Xmx512M

  4. eclipse.ini 2009.06.09 13:39 address edit & del reply

    linux


    -startup
    plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256m
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xmx1024m
    -Xms1024m
    -Xverify:none
    -XX:MaxPermSize=256m
    -XX:+UseParallelGC


    windows


    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256M
    -framework
    plugins\org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xmx1024m
    -Xms1024m
    -Xverify:none
    -XX:MaxPermSize=256m
    -XX:+UseParallelGC