Screen Shot 2011-12-25 at 7.31.31 PM

PHP İle Debug İşlemleri

Çalıştığımız projelerde sorunları yakalayıp düzeltmek kimi zaman uzun vakitler alabiliyor. Özelliklede karmaşık işlerde adım adım her işlemin sonucunu görmemiz gerekiyorsa print_r veya var_dump kullanmak sadece sabır sınaması olmaktadır… Bu yüzden işleri kolaylaştırmak için geliştirilen bir takım yöntemler ve araçlar mevcuttur. 1. PHP de Hata mesajlarının ayarlanması 2. IDE üzerinde hatalı yazılan kodların farklı biçimde renklendirilmesi […]

Çalıştığımız projelerde sorunları yakalayıp düzeltmek kimi zaman uzun vakitler alabiliyor. Özelliklede karmaşık işlerde adım adım her işlemin sonucunu görmemiz gerekiyorsa print_r veya var_dump kullanmak sadece sabır sınaması olmaktadır…

Bu yüzden işleri kolaylaştırmak için geliştirilen bir takım yöntemler ve araçlar mevcuttur.

1. PHP de Hata mesajlarının ayarlanması
2. IDE üzerinde hatalı yazılan kodların farklı biçimde renklendirilmesi
3. IDE yardımıyla Debugger ların kullanımı. ( xdebug, zend debugger )
4. FirePHP’nin gönderdiği mesajları Firefox, Chrome üzerindeki developer tool üzerinden görme.
5. Framework lerin debug araçları. ( ZFDebug, FireSymfony )

1. PHP de Hata mesajlarının ayarlanması:
Hata mesajlarını açmak için php.ini dosyasından şu komutları verebilirsiniz.

display_errors = 1
error_reporting = E_ALL

Böylece bütün mesajlar her koşulda gözükecektir. Ama eğer bir işlemin önüne “@” işareti koyarsanız kesinlikle hata mesajı çıkmayacaktır. (Error Control yazısı okunmalı. Zira bu durumun değişebileceğini unutmamak gerek) Bunu kullanmanızı önermiyorum. Zira ilerde bir sorun olduğunda sizden sonra gelecek bir geliştirici hatta siz bile bunu unutabileceğinizden hatayı yakalamanız çok zor olacaktır. (Ancak Allah’ın yardımıyla :)) )

display_errors

Yukardaki parametre hatanın gösterilme veya gösterilmemesine karar verir. Hataları genel olarak ikiye ayırabiliriz. “error” ve “warning” ler. Error çalışmayı durduran ciddi hatalardır. Warning iş akışını olumsuz etkileyebilecek fakat akışı kesmeyecek hatalardır.

error_reporting

Yukardaki ise hangi mesajların gösterilip hangilerinin gösterilmeyeceğine karar verir. Detay burda
Her zaman tüm hataları görmek en iyi yoldur. Çünkü beraber çalıştığınız insanların veya kendinizin
ne hatalar yaptığını bilmek çok önemlidir. Bu komutları sadece php.ini değil .htaccess
dosyasınada yazabileceğinizi hatırlatmak isterim. Ama php farklı bir modda çalışıyorsa (cgi) bu komutlar devre dışı kalabilir.

php_flag  display_errors on

2. IDE üzerinde hatalı yazılan kodların farklı biçimde renklendirilmesi
Bu konu çok basit detay vermeye pek gerek yok. Bütün IDE diyebileceğimiz geliştirme araçları kullandığınız
dilde bir hata yaparsanız bunu gözünüze sokarlar. 3. IDE yardımıyla Debugger ların kullanımı. ( xdebug, zend debugger )
Burası önemli çoğu geliştirici PHP nin bu özelliğini kullanmaz ki kaldıki kullanmak zorunda da değil
adam kafasından debug yapıyor olabilir :)

3. IDE yardımıyla Debugger ların kullanımı. ( xdebug, zend debugger )
Debug işlemlerinde ben xdebug ve IDE olarak Netbeans kullanıyorum kısaca onu anlatacağım. Bu işlemleri başlatabilmek için
xdebug’un kurulu olması gerekmektedir. Hızlıca anlatacak olursak http://code.activestate.com/komodo/remotedebugging/ burdan kullandığınız işletim sistemine uygun olarak indirme işlemini yapın. Buranın avantajı linux ve Mac kullanan kardeşlerimiz için xdebug.so isimli derlenmiş dosyayı vermeleridir.

PHP.ini dosyanıza aşağıdaki kodları ekleyin. Tabi xdebug pathini kendi koyduğunuz yere göre verin. Ayrıca başka bir debug mekanizması varsa onu kadırın. Son olarakda sunucuyu restart edin.

[xdebug]
zend_extension="/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
;xdebug.remote_autostart=1
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "/var/tmp/grindfiles"
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.idekey="netbeans-xdebug"

Netbeans üzerinde ise ide key olayını yukardaki gibi vermek yeterli olacaktır.

Browser üzerinden direk yakalamayı aktif etmek için;

http://site.local/?XDEBUG_SESSION_START=netbeans-xdebug

Örnek kod;

Kodumuzun 6. satırında “breakpoint” işareti  koyuyoruz bunun için satır nosuna çift  tıklamak yeterli.

Bu kısımdan sonraki durma noktası veya sonraki satıra  ilerleme işlemlerini yapıyoruz.

Variables : Bu tab bütün değişkenleri göstermekedir. Superglobals kısmı global değişkenleri ve içeriğini tutar.

Watches: Özel olarak izlemek istediğiniz bir değişken varsa solda 3 adet bulunan yakut (sanırım yakut) + olana tıklayıp ekliyoruz.
Bu kısmın çalışması için  Netbeans -> Preferences -> PHP -> General -> watches and balloon evaluation seçili olmalı

Şimdi bir ekleme yapalım;

Bunun sonucuna bakalım ;

Gördüğünüz üzere runtime esnasında işlemler daha bitmeden istediğim bilgilere ulaştım. Regex kullanımı ve bunun gibi birçok işlemi yapabileceğinizi unutmayın.

4. FirePHP’nin gönderdiği mesajları Firefox, Chrome üzerindeki developer tool üzerinden görme.
FirePHP PHP içinden hertürden mesajını tarayıcının (firefox, chrome) console kısmına vermenizi sağlar. Bu mesajları isterseniz bir dosyayada yazabilirsiniz. Firefox için firephp extension kurulduğunda bu mesajları gruplayabilirsiniz. Aşağıdaki resimde görüldüğü gibi “Errors”, “Warnings”, “Info” seçilebilir.

5. Framework lerin debug araçları. ( ZFDebug, FireSymfony )
İllaki bir çok framework un kendine has aracı vardır. Burda Zend Framework da kullandığım aracı tanıtacağım.

ZFdebug ile projeniz hakkında bir çok bilgiye sahip oluyorsunuz. Kullanılan SQL, Memory, Cache, Süre, Dosyalar vs..

Yazı burada sona eriyor “nasıl yapılır” konularına çok girmedim bu yazı sadece bir yol göstericidir. Eksikler varsa lütfen bildiriniz.