title

XDebug를 이용한 PHP 디버깅 - 4

Tip&Tech | 2007.10.19 01:00

꽤 오랜 시간이 흘렀네요. -_-;; 솔직히 잊어먹고 있었습니다. 죄송합니다. (__)

이번에 할 것은 전에 예고한대로 서버측 프로그램을 디버깅 하는 리모트 디버깅 방법입니다. 당연히 서버에 설치하는 것부터 합니다.

# tar zxf xdebug-2.0.0.tgz
# cd xdebug-2.0.0
# phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
# ./configure
# make

위의 과정은 간단히, XDebug PHP 모듈을 다운받고 압축을 푼 뒤, 확장 모듈로 만들어 컴파일 하는 것까지다. 위 과정이 끝나면 modules 디렉토리에 xdebug.so 파일이 생성되는데 이것을 PHP 확장모듈이 있는 디렉토리에 복사한다. 보통은 직접 복사하지 않고 make install 만 입력해도 가능하다.

# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

이제 php.ini 파일을 열어서 다음 줄을 추가하고 웹서버를 재시작한다.

more…

XDebug를 이용한 PHP 디버깅 - 3

Tip&Tech | 2007.07.25 02:31

이번엔 프로파일링 기능을 살펴보겠습니다. 프로파일링 기능을 이용하면 어떤 함수에서 부하가 걸렸는지 또는 어느 정도의 빈도로 실행되었는지 등을 점검할 수 있어 보다 최적화된 코드를 만들 수 있습니다.
XDebug에는 프로파일링 기능을 사용하는 두 가지 방법이 있습니다.

  1. 모든 스크립트에 대해서 자동으로 프로파일링을 하고 싶을 경우
    php.ini 파일에 xdebug.profiler_enable = 1 로 설정하면 됩니다.
  2. 특정 파일에 대해서만 프로파일링을 하고 싶을 경우
    php.ini 파일에서 xdebug.profiler_enable_trigger = 1 로 설정하고 GET 혹은 POST 방식으로 XDEBUG_PROFILE 이라는 파라미터를 전송하기만 하면 됩니다. 예를 들어 프로파일링 기능을 사용하려면, 다음과 같이 URL을 호출합니다.
    http://example.com/sample.php?XDEBUG_PROFILE=1

위의 두 방법 모두 공통으로 xdebug.profiler_output_dir 을 설정해야 합니다. 설정하지 않으면 기본으로 /tmp 가 지정되는데, 지금 우리가 보고 있는 것은 윈도우이므로 /tmp 가 유효하지 않으므로 경로를 수정해줘야 합니다.

프로파일링 파일은 CacheGrind 의 파일 포맷과 호환되도록 되어있습니다. 따라서 CacheGrind 파일을 읽을 수 있는 어플리케이션이 있으면 되는데, Linux의 KDE 환경에서는 KCacheGrind 가 있고, Windows 환경에는 WinCacheGrind가 있습니다. 기능이나 디자인 면에서는 KCacheGrind가 더 낫다고 하는데 아쉬운 대로 WinCacheGrind 를 쓰도록 하겠습니다. ^^

more…

XDebug를 이용한 PHP 디버깅 - 2

Tip&Tech | 2007.07.23 03:25

기본기능 (link)

우선 간단한 기본 기능부터 살펴보도록 하겠습니다. 기본기능은 http://xdebug.org/docs/basic 의 문서를 참고로 작성했습니다. 각 함수에 대한 레퍼런스는 관련 링크를 참고하시기 바랍니다.
테스트할 debug.php 파일을 작성합니다.

function sample($str) {
  echo 'Called @ '.
    xdebug_call_file().
    ':'.
    xdebug_call_line().
    ' from '.
    xdebug_call_function();
}
$ret sample(array('Derik'));

브라우저에서 실행한 결과는 다음과 같습니다.

Called @ C:\Program Files\xampplite\htdocs\debug.php:11 from {main}

자 이번엔 debug2.php 파일을 작성해보겠습니다.

  1  include 'debug.php';
  2    
  3  function caller_sample($str) {
  4    sample($str);
  5  }
  6    
  7  echo "<br>";
  8  sample('gony');
  9    
 10  echo "<br>";
 11  caller_sample('taegon');
 12  ?>

Called @ C:\Program Files\xampplite\htdocs\debug.php:11 from {}
Called @ C:\Program Files\xampplite\htdocs\debug2.php:5 from {main}
Called @ C:\Program Files\xampplite\htdocs\debug2.php:5 from caller_sample

예제만 봐도 이해가 되죠? ^^ 어느 파일에서, 몇번째 라인에서, 어떤 클래스 혹은 어떤 함수가 해당 함수를 호출했는지 찾아낼 수 있는 기능입니다. 그 외에는 메모리 사용량을 알아볼 수 있는 xdebug_memory_usage() 와 최대 순간 메모리 사용량을 알아볼 수 있는 xdebug_peak_memory_usage() 등이 유용합니다. xdebug_time_index() 를 이용하면 실행 경과 시간을 체크하기에도 용이합니다.

more…