꽤 오랜 시간이 흘렀네요. -_-;; 솔직히 잊어먹고 있었습니다. 죄송합니다. (__)
이번에 할 것은 전에 예고한대로 서버측 프로그램을 디버깅 하는 리모트 디버깅 방법입니다. 당연히 서버에 설치하는 것부터 합니다.
# 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.ini 파일에 xdebug.profiler_enable = 1 로 설정하면 됩니다.
- 특정 파일에 대해서만 프로파일링을 하고 싶을 경우
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…
기본기능 (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…