Xdebug to program do profilowania i debugowania kodu PHP. Od wersji 2.* posiada znacznie więcej opcji i możliwości. Dokumentacja jak i sama aplikacja dostępna jest na stronie projektu
www.xdebug.org. Poniżej omówię kilka ciekawszych opcji Xdebug.
Jeżeli PHP skompilowane zostało z opcją
--enable-memory-limit to w xdebug będziemy mieć dostęp do funkcji
xdebug_memory_usage() i
xdebug_peak_memory_usage(). Pierwsza zwraca (int) ilość zajmowanej pamięci przez wykonujący się właśnie skrypt, druga zwraca największe zużycie pamięci (od początku do momentu wywołania funkcji)
<?php
$x = file_get_contents('a.pdf');
echo xdebug_peak_memory_usage()/1048576;
Po wczytaniu 4.6MB plik pdf funkcja xdebug zwraca pik 4.61658477783 MB zajętej pamięci.
xdebug_start_trace(string trace_file [, integer options]) - za pomocą tej funkcji uruchamiamy śledzenie wykonywania się kodu. Pierwszy parametr to nazwa pliku, do którego mają być zapisane dane a drugi to albo 0 albo 1 - ustala formatowanie danych, w przypadku 1 dane będą dodatkowo dopisywane do pliku (nie będą nadpisywane istniejące dane.
<?php
xdebug_start_trace('a', 0);
$x = file_get_contents('a.pdf');
$x = substr($x, 0, 1000);
$x = base64_encode($x);
xdebug_stop_trace();
Przykładowy wynik:
TRACE START [2008-11-11 19:04:15]
0.0012 189752 -> define() /srv/http/html/punbb-1.2.20/index.php:27
0.0017 264176 -> require(/srv/http/html/punbb-1.2.20/include/common.php) /srv/http/html/punbb-1.2.20/index.php:28
0.0017 264176 -> defined() /srv/http/html/punbb-1.2.20/include/common.php:32
0.0048 850384 -> require(/srv/http/html/punbb-1.2.20/include/functions.php) /srv/http/html/punbb-1.2.20/include/common.php:37
0.0048 850456 -> function_exists() /srv/http/html/punbb-1.2.20/include/functions.php:653
Po wygenerowaniu loga możesz skorzystać z
parsera XDebug dostępnego w Bibliotece (Dla XDebug 2.0.3 i nowszych).
Wystarczy dodać do php.ini:
xdebug.profiler_enable=1
xdebug.extended_info=0
xdebug.remote_enable=0
xdebug.auto_trace=0
xdebug.profiler_output_dir=/ścieżka/do/katalogu
Gdzie
/ścieżka/do/katalogu to ścieżka do katalogu, w którym umieszczane będą dane z profilera (kalog musi mieć odpowiednie uprawnienia zapisu). Każde wykonanie dowolnego skryptu PHP spowoduje wygenerowanie pliku wynikowego z danymi dla KcacheGrind. Dla ostatniego przykładu:
Pod MS Windows istnieje "wingrind", lecz jest to stara aplikacja i brakuje jej funkcjonalności dostępnej w KCachegrind jak np. wizualizacja zużycia zasobów przez poszczególne bloki kodu. Pod Linuksem i Uniksami Kcachegrind można zainstalowac z repozytorium, jest to aplikacja wchodząca w skład KDE. Jeżeli nie ma oddzielnego pakietu należy zainstalować pakiet kdesdk.
Dla MS Windows należy użyć instalatora aplikacji KDE4 z winkde.org. Pobieramy instalator i przy instalowaniu pakietów wybieramy kdesdk (oraz opcjonalnie pakiet z tłumaczeniami i graphiz).
W przypadku Mac OS X można skorzystać z pakietów dostępnych w repozytorium Fink, czy też Darwin Ports, lub użyć pakietów z KDE 4 Mac (nie testowałem).
- Dodany: 19.11.2008 przez riklaunim