반응형

PHP로 개발하는데, 혹시 디버깅(debugging)이라는 '용어'를 들으면 print_r()이나 var_dump() 함수가 가장 먼저 떠오르나? 그럼, 뭔가(?) 몹시 외롭게 사투하는 중일 가능성이 높다. PHP에서도 breakpoint를 설정해가면서 진짜 디버깅을 할 수가 있다. 이 대목에서 잠깐, breakpoint가 뭘까? 고개를 갸우뚱하는 사람은 정말 너무 오랫동안 PHP로 웹 개발만, 그것도 다른 개발자들과 담을 쌓고 혼자 살아왔을 가능성이 농후하다. 물론, 가난한 개발자여서 인터랙티브 디버깅(interactive debugging)이 가능한 Zend Studio와 같은 비싼 툴을 살 수가 없었기 때문일 수도 있다. 하지만 관심을 가지고 찾아봤으면 Zend Studio 외에도 삽질만 쫌 하면 구해서 쓸 수 있는 무료 툴들이 있었다. 대표적인 것이 바로 eclipse + xdebug 이다.

 

잠깐, 인터랙티브 디버깅(interactive debugging)의 장점을 생각나는 대로 메모해본다. 소스 코드에서 실행을 멈춰 보고 싶은 행에 중단점(breakpoint)을 설정할 수 있다. 그 지점에서부터 한 줄(행)씩 실행하거나 다음 중단점까지 실행하거나 할 수 있다. 그 와중에 모든 변수들의 값을 관찰할 수 있다. 따로 print_r()이나 var_dump() 함수로 변수값을 화면이나 로그 파일로 찍어내지 않아도 된다. (-> 프로그램 코드가 아주 깨끗해진다.) 마치 비디오 판독작업을 할 때처럼 순간 정지나 슬로비디오로 천천히 들여다 볼 수 있다. 이 기능의 위력을 알게 되면 그동안 print_r()과 var_dump()에만 기대어 살아온 날들이 허무하고 억울하게 느껴지게 된다. 이제부터라도 사용해보도록 하자.

 

Xdebug를 사용하려면, (1) 서버측에서의 설정과 (2) eclipse에서의 설정, 두 가지가 모두 필요하다.

 

 

1. 서버측 설정 : XAMPP

 

윈도 PC에서 apache/mysql/php 서버 환경을 간단하게 구축할 수 있도록 해주는 통합 패키지 xampp의 설치 및 설정은 다음 글 참조.

 

2009년 8월 6일 현재 XAMPP 최신 버전은 1.7.1 임. 기존의 1.6.x 버전대와 몇 가지 달라진 점 때문에, Xdebug 설정이 조금 혼란스러워 졌음. 과거의 방법들은 잊고, 새로운/더 쉬운 방법만 기억하자.

 

XAMPP 1.7.1 버전에는 xdebug 모듈이 이미 포함되어 있다. xampp\php\ext 디렉토리에 가면 php_xdebug.dll 파일이 있다. 실제로 xdebug 배포 사이트에 가보면, 대체 어떤 파일을 골라서 가지고 와야 하는지, 정말 어수선하고 혼란스럽고 헷갈리고 그래서 급기야 짜증모드로 돌진하게 되곤 한다. 다행인지 XAMPP 패키지에는 이미 적합한 놈이 들어있다. (혹시 참을성에 자신있으신 분은 xdebug 사이트로 가서 적합한 놈을 찾아보시길… http://www.xdebug.org 농담임. 괜히 고생함.)

 

중요한 설정작업: php.ini

 

XAMPP php.ini 파일은 xampp\php 디렉토리 밑에 있다. 그 파일을 열어서 xdebug 관련 부분을 설정해준다.

처음에는 아래와 같이 되어 있다.

 

 

위 부분에서 [Zend] 섹션은 모두 코멘트(;)로 막아준다. 그리고, 아래 [XDebug] 섹션은 모두 코멘트 해제한다.

 

 

xdebug는 Zend Optimizer와 함께 사용할 수가 없다. 보통 디버깅은 테스트 서버에서 수행하게 되므로, 특별히 Zend Optimizer가 없다고 해서 특별히 문제가 생기지는 않을 것이다. 만약 LIVE 서버(실 운영서버)라면 xdebug 모드는 접는 게 좋겠다.

 

주의사항: xdebug 관련 내용을 php.ini 파일에서 찾아보면 위 부분외에도 extension 지정하는 부분이 하나 더 나온다. 기본적으로는 코멘트로 막혀있다. 이 부분은 굳이 풀어주지 않아도 된다. 만약 이 부분을 풀어준다면, Warning 이 뜬다. 물론, eclipse에서 디버깅도 안된다.

   

[추가사항: 2009년 8월 13일]

2009년 8월 10일, XAMPP 1.7.2 버전이 새로 나옴. 패키지에 포함된 PHP 버전도 5.3.0으로 올라가고, Xdebug 모듈도 2.0.5로 올라갔다. 특히, php.ini 에서 xdebug 설정해주는 방법이 몹시 간단해졌다.

   

xdebug 설정을 위해 해줄 작업은 단 한줄의 코멘트를 제거해주는 일로 줄었다.

   

   

이것만 해주면, 아래와 같이 XDebug가 먹힌다.

   

   

추가사항 끝~

   

Xdebug 설정 전에는 php -v 명령을 실행하면 아래와 같이 나온다.

 


 

php.ini 설정을 완료하면, 아래와 같이 "with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans" 문구가 보인다.

 

 

모든 게 정상적으로 잘 설정되면, 아래 링크를 눌렀을 때 웹 페이지에서도 아래와 같은 이미지가 보인다. php.ini 파일을 수정했으므로 물론 아파치 서버는 stop시켰다가 새로 start 시켜야 한다.

 

 

뭔가 잘못되었으면, 아래와 같은 이미지가 보인다. "with Xdebug.." 메시지가 없다.

 

 

재미있는 것은 뭔가 잘못된 와중에도 아래와 같이 phpinfo() 출력값의 xdebug 섹션에는 관련 값들이 잘 보이는 경우가 있다.

 

 

이것은, 설정값은 적용되었지만, 정작 중요한 php_xdebug 모듈이 올라가지 않은 상황이다. php.ini 파일의 중간 부분에 있는 ; Windows Extensions 의 extension=php_xdebug.dll 설정라인이 코멘트로 잘 막혀있는지를 다시 확인해보자. 이걸 코멘트 해제하고 밑에서 [XDebug] 섹션도 코멘트 해제하면 서로 충돌해서 안된다. 이건 건들지 말자!

 


 

 

2. eclipse에서의 설정

 

eclipse galileo 버전(3.5)에서는 사실 특별히 뭔가를 새로 설치해주지 않아도 된다. (얼마나 편해졌는지… 혹시 예전 버전에서의 설정법을 알고 싶다면, 이 링크 참조. Eclipse 에 XDebug 플러그인 추가하기)

 

Xdebug를 위해 eclipse에서 해줘야 할 설정작업은 다음과 같다. 좀 많은 건 사실이다.

 

2.1. 우선 eclipse 에서 PHP Project를 하나 만든다.

 

웹 서버와의 연동을 테스트할 것이므로 웹 서버 document_root인 htdocs 밑에 디렉토리가 위치하는 PHP Project를 만드는 게 좋겠다.

 

 

아주 간단한 테스트 파일을 하나 만들자.

 

echo.php

<?php

$w = "hi, ";
echo $w;

$w = $w . "world...<br>\n";
echo $w;

$sum = 0;
for ($i=0; $i<10; $i++) {



$sum = $sum + $i;



printf("%d \t = \t%d <br>\n", $i, $sum);
}

 

 

2.2. Window->Preferences:: PHP ?> PHP Server 설정

 

 

위의 Default PHP Webserver 항목을 더블 클릭으로 누르거나 'Edit' 버튼을 눌러서 아래 화면을 띄운다.

 

 

그 다음 'Path Mapping' 항목을 눌러서, 값을 설정해준다. 웹 서버에서의 경로와 Eclipse 워크스페이스에서의 경로를 서로 맞춰주는 과정이다.

 

 

완료되면, 아래와 같이 보인다.

 

 

 

2.3. Window->Preferences:: PHP ?> PHP Executables 설정

 

 

php.ini 파일의 설정이 잘되었다면, 위와 같이 'Search' 버튼을 눌러서 XAMPP 설치 디렉토리를 지정하고 PHP 실행파일을 검색해본다. 만약 잘 찾았으면 아래와 같이 내용이 짠하고 나타난다.

 

 

만약 자동검색으로 잘 못찾으면, 'Add' 버튼을 눌러서 하나씩 지정해줘도 된다. 자동검색으로는 Zend Debugger 타입만 검색된다. XDebug 타입을 아래와 같이 'Add'해줘야 한다.

 

 

 

2.4. Window->Preferences:: PHP ?> PHP Debug 설정

 

PHP Debugger 타입을 XDebug로 바꾸면, 자동으로 밑의 PHP Executable도 바뀐다.

 

 

이제 대충 설정하는 작업은 마쳤다.

 

 

3. 실행해보기

 

3.1. Script로 디버깅하기

 

메뉴에서 벌레모양 아이콘의 화살표 부분을 누르고 Debug As ?> PHP Script 항목을 누른다.

 

 

퍼스펙티브를 바꿀려고 하는데 맞냐고 아주 친절하게 물어온다. 맞다고 해준다.

 

 

짜잔~ 드디어 디버깅 화면이 보인다.

 

 

위 화면에서 (1)은 중단점(Breakpoint)이다. 디폴트로 1st line이 자동으로 중단점이 된다. 만약 다른 라인에도 중단점을 주고 싶으면 편집창 왼편의 회색부분을 2번 클릭하면 된다.

 

위 화면의 (2)는 변수값을 관찰할 수 있는 영역이다. 현재는 모든 변수값이 초기화되기 전이므로 <Uninitialized>로 나타난다.

 

위 화면의 (3)은 컨트롤 버튼이다. Step Into(F5)는 한 라인씩 진행하되 함수 안으로까지 추적해들어가는 명령이고, Step Over(F6)는 함수를 만나면 안으로 들어가지 않고 그냥 한 라인으로 생각하고 다음 라인으로 넘어간다.

 

 

4행까지 진행한 결과가 위 화면이다. 변수값 $w의 값이 바뀌었고, Console과 Debug 창에 echo $w 결과값이 나타나 있다.

 

그 이후 과정도 이런 식이다. 한 줄씩 실행하면서 관련된 변수값의 변화를 관찰하는 것이다.

 

3.2. Web Page로 디버깅하기

 

메뉴에서 벌레모양 아이콘의 화살표 부분을 누르고 Debug As ?> PHP Web Page 항목을 누른다.

 

 

 

로컬서버인 xampp에서의 경로가 맞는지를 확인하는 창이 아래와 같이 뜬다.

 

 

다시, 친절하게 물어본다. 퍼스펙티브 바뀌는 게 맞냐고? 맞다고 해준다.

 

 

짜잔… 다시 디버깅 화면이 뜬다.

 

다른 건, Script 디버깅 모드와 동일한데, 아래와 같이 웹 브라우저가 뜨면서, 뭔가를 기다리는 모양새가 된다. 현재의 예제는 PHP 코드의 끝까지 실행되어야만 화면에 출력되므로, 사실 디버깅이 끝날 때까지 웹 브라우저는 그냥 계속 기다린다.

 

 

 

4. 보충

 

4.1. eclipse Run/Debug Configurations 화면에 대한 오해

 

처음 eclipse의 Debug Configurations 화면을 보면서, 잠시 막막했던 적이 있다. 아니, 매번 하나씩 이렇게 설정을 New해서 만들어줘야 하나? 그걸 귀찮아서 어떻게 해!!! 그랬다.

 

 

아래 화면처럼 하나씩 직접 입력해서 만들어줘야 하는 줄 알았다. 오해였다. 착각이었다. 이클립스가 그렇게 허술하고 불친절한 툴이 절대 아니다.

 

 

 

그냥, 아래와 같이 Rus As ?> PHP Script / PHP Web Page 를 선택해서 실행해주면 된다. 한 번 실행된 것은 자동으로 Configuration으로 만들어져서, 아래 그림에서와 같이 'echo' 'echo web'이라는 이름으로 빠른 실행이 가능하게 메뉴에 나타나게 된다.

 

 

 

 

 

4.2. Web Page 디버깅시 웹 브라우저가 뜨는 게 귀찮다면? Internal Web browser를 사용!

 

Window->Preferences: General->Web Browser에서 아래와 같이 선택한다.

 

 

그럼, 아래와 같이 디버깅이 마지막 라인까지 도달하면, Internal Browser의 출력값을 확인할 수 있다.

 

 

 

4.3. 참고한 문서들

 

 

 

 

 

 

 

반응형

'Language > PHP' 카테고리의 다른 글

플레쉬 차트 (OFC2JS) - Table2Chart  (0) 2010.01.19
정규표현식 테스트 필요할 때 보조 프로그램  (0) 2010.01.19
PHP 정규표현식  (0) 2010.01.18
XAMPP 설치 가이드  (0) 2009.12.28
xampp  (0) 2009.12.28

+ Recent posts