SAPI modülü olarak uygulanan Interactive Stepthrough PHP Debugger, kodunuzun işlevselliğini veya performansını etkilemeden çevre üzerinde tam kontrol sahibi olmanızı sağlar. PHP 5.4+ için hafif, güçlü, kullanımı kolay bir hata ayıklama platformu olmayı hedefliyor ve PHP 5.6 ile birlikte geliyor.
Özellikler şunları içerir:
- Adım Adım Hata Ayıklama
- Esnek Kesme Noktaları (Sınıf Yöntemi, İşlev, Dosya: Çizgi, Adres, Opcode)
- Yerleşik eval () ile PHP'ye Kolay Erişim
- Yürütülmekte Olan Kodlara Kolay Erişim
- Userland API'sı
- SAPI Agnostic - Kolay Entegre
- PHP Yapılandırma Dosyası Desteği
- JIT Süper Globals - Kendi Ayarlayın !!
- İsteğe bağlı okuma hattı Desteği - Konforlu Terminal Kullanımı
- Uzaktan Hata Ayıklama Desteği - Birlikte verilen Java GUI
- Kolay operasyon
Ekran görüntülerine bakın:
Ana sayfa: http://phpdbg.com/
PHP Hatası - PHP için daha iyi hata bildirimi
Bu, PHP komut dosyalarınızda hata ayıklamak için kitaplığı (aslında bir dosya) kullanmak çok kolaydır.
Yapmanız gereken tek şey aşağıdaki gibi bir dosya eklemektir (kodunuzun başında):
require('php_error.php');
\php_error\reportErrors();
Ardından tüm hatalar size geri izleme, kod içeriği, işlev bağımsız değişkenleri, sunucu değişkenleri vb. Gibi bilgiler verir. Örneğin:
Özellikler:
- önemsiz, sadece bir dosya
- normal ve ajaxy istekleri için tarayıcıda görüntülenen hatalar
- AJAX istekleri duraklatılarak otomatik olarak yeniden çalıştırılabilir
- hataları olabildiğince katı hale getirir (kod kalitesini teşvik eder ve performansı artırma eğilimi gösterir)
- kod yığınlarını tüm yığın izlemesi boyunca kodlama
- daha fazla bilgi sağlar (tam işlev imzaları gibi)
- sadece yanlış olan bazı hata mesajlarını düzeltir
- sözdizimi vurgulama
- güzel görünüyor!
- özelleştirme
- manuel olarak açma ve kapatma
- hata bildirmeden belirli bölümleri çalıştır
- yığın izlemenizdeki kodu vurgulamaktan kaçınmanıza izin veren dosyaları yoksay
- uygulama dosyaları; bir hata oluştuğunda bunlara öncelik verilir!
Ana sayfa: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Çatalım (ekstra düzeltmelerle): https://github.com/kenorb-contrib/PHP-Error
Sisteminiz DTrace dinamik izlemeyi (OS X'te varsayılan olarak yüklüdür) destekliyorsa ve PHP'niz , varsayılan olarak olması gereken DTrace probları etkin ( --enable-dtrace
) ile derlenmişse , bu komut PHP betiğinde hata ayıklamanıza yardımcı olur:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
Bu nedenle rc dosyalarınıza aşağıdaki takma ad eklendi (örn ~/.bashrc
. ~/.bash_aliases
):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
Eğer takma hatırlanması kolay olan komut dosyasının iz olabilir: trace-php
.
İşte daha gelişmiş dtrace betiği, sadece içine kaydedin dtruss-php.d
, yürütülebilir ( chmod +x dtruss-php.d
) yapın ve çalıştırın:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
Ana Sayfa: GitHub'da dtruss lambası
İşte basit kullanım:
- Çalıştırın:
sudo dtruss-php.d
.
- Başka bir terminal dönemde üzerinde:
php -r "phpinfo();"
.
Bunu test etmek için, index.php
PHP yerleşik sunucusuyla herhangi bir doktora gidebilir ve çalıştırabilirsiniz:
php -S localhost:8080
Bundan sonra siteye şu adresten erişebilirsiniz: http: // localhost: 8080 / adresinden (veya sizin için uygun olan herhangi bir bağlantı noktasını seçebilirsiniz). Buradan izleme çıktısını görmek için bazı sayfalara erişin.
Not: Dtrace varsayılan olarak OS X'te mevcuttur, Linux'ta muhtemelen dtrace4linux'a ihtiyacınız vardır veya diğer alternatifleri kontrol edin .
Bkz: PHP ve DTrace kullanma at php.net
Alternatif olarak, SystemTap SDT geliştirme paketini (ör. yum install systemtap-sdt-devel
) .
İşte all_probes.stp
SystemTap ile çalışan bir PHP betiği süresince tüm temel PHP statik prob noktalarını izlemek için örnek script ( ):
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
Kullanımı:
stap -c 'sapi/cli/php test.php' all_probes.stp
Bkz: php.net adresinde PHP DTrace Statik Sondalar ile SystemTap Kullanımı