PHP ve Debug

Eğer zend gibi gelişmiş ideler kullanmıyorsanız, php ortamının önemli eksikliklerinden biri debugger ve profiler gibi araçlardır.

php script yazarları, çoğunlukla adım adım kodlama yaptıkları için, bir hata meydana geldiğinde hatanın olduğu satıra gidip düzeltirler. Değişkenlerin değerine bakmak gerektiği durumlarda da echo, var_dump gibi komutlar ile değişken değerlerini ekrana basarak işlerini hallederler. İtiraf etmek gerekirse ben de onlardan biriyim yani aşağıdaki araçların bütün fonksiyonlarini kullanmadım, çünkü çoğu zaman klasik yöntemler iş görüyor. özelikle karmaşık olmayan kendi yazdığınız kodlar üzerinde. Neyse önce araçları tanıyalım, daha sonra kendi işime yarayan özelliklerini anlatayım.

XDEBUG
xdebug bir php eklentisi, size scriptleriniz hakkinda debug bilgileri veriyor. xdebugi çalışır duruma getirdiğiniz zaman artık klasik hata mesajları yerine çok daha detaylı hata mesajları alıyorsunuz, çağrılan fonksiyonlar, fonksiyonlara geçen parametreler, harcadıkları memory, süre, lokal, global değişkenler. Xdebugin benim en çok kullandığım ve sevdiğim özelliği ise profiling bilgisi vermesi. xdebug hakkındaki ayrıntılara aşağıdaki linkten ulaşabilirsiniz.

http://xdebug.org/

WINCACHEGRIND
Bu program xdebugın ürettiği cachegrind.out dosyalarına windows üzerinde bakabilmenizi sağlıyor. yani işin izleme kısmını hallediyor.

http://sourceforge.net/projects/wincachegrind/

xdebug kullanarak hatalar hakkında daha ayrıntılı bilgilere ulaşabiliyorsunuz, yukarıda da bahsettiğim gibi benim kullandığım özelliği bu değil. Bu araçları kullandığım 2 durum var.

1. Bazen yazdığınız kod yanıt vermez hatta sayfa açılmaz ve timeout olur. Bu durumda büyük ihtimalle kodunuz bir döngü oluşturuyor ve serverin anasını ağlatıyordur :). Hata mesajı olmadığı için tek tek echo exit yaparak nerede tıkandığını(bottleneck) bulmaya çalışırsınız. Tabii artık debug araçlarınız var hemen oluşan cachegrind.out dosyasını açıyorsunuz ve hangi fonksiyon ne kadar süre ile çalışmış, kaç kez çağrılmış görüyorsunuz, uzun bir kodda bu sizin birkaç saatinizi kurtaracaktır.

2. durum da, ki en güzelini sona sakladım, başka birinin kodunu incelemek zorunda kaldınız diyelim. Ya tek tek bütün satırlara bakacaksınız acaba ne zaman hangi fonksiyon çağrılıyor diyerek, ya da bir işlem yapıp xdebug çıktısı eşliğinde ilerliyeceksiniz. Emin olun bu yöntem çok daha zevkli ve hızlı.