Archive for July, 2007
이번엔 프로파일링 기능을 살펴보겠습니다. 프로파일링 기능을 이용하면 어떤 함수에서 부하가 걸렸는지 또는 어느 정도의 빈도로 실행되었는지 등을 점검할 수 있어 보다 최적화된 코드를 만들 수 있습니다.
XDebug에는 프로파일링 기능을 사용하는 두 가지 방법이 있습니다.
위의 두 방법 모두 공통으로 xdebug.profiler_output_dir 을 설정해야 합니다. 설정하지 않으면 기본으로 /tmp 가 지정되는데, 지금 우리가 보고 있는 것은 윈도우이므로 /tmp 가 유효하지 않으므로 경로를 수정해줘야 합니다.
프로파일링 파일은 CacheGrind 의 파일 포맷과 호환되도록 되어있습니다. 따라서 CacheGrind 파일을 읽을 수 있는 어플리케이션이 있으면 되는데, Linux의 KDE 환경에서는 KCacheGrind 가 있고, Windows 환경에는 WinCacheGrind가 있습니다. 기능이나 디자인 면에서는 KCacheGrind가 더 낫다고 하는데 아쉬운 대로 WinCacheGrind 를 쓰도록 하겠습니다. ^^
기본기능 (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 파일을 작성해보겠습니다.
include 'debug.php'; function caller_sample($str) { sample($str); } echo "<br />"; sample('gony'); echo "<br />"; caller_sample('taegon'); ?>
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() 를 이용하면 실행 경과 시간을 체크하기에도 용이합니다.