Tracy'ye Başlarken
Tracy kütüphanesi, PHP programcısının günlük olarak kullandığı yararlı bir yardımcıdır. Size yardımcı olur:
- hataları hızla tespit etme ve düzeltme
- hataları günlüğe kaydetme
- değişkenleri yazdırma
- betiklerin ve veritabanı sorgularının süresini ölçme
- bellek gereksinimlerini izleme
PHP, geliştiricilere önemli ölçüde özgürlük verdiği için tespit edilmesi zor hatalar oluşturmak için mükemmel bir dildir. Bu nedenle hata ayıklama aracı Tracy daha da değerlidir. PHP için teşhis araçları arasında mutlak zirveyi temsil eder.
Bugün Tracy ile ilk kez karşılaşıyorsanız, hayatınızın Tracy'den öncesi ve sonrası olarak ikiye ayrılacağına inanın. Daha iyi kısma hoş geldiniz!
Kurulum
Tracy'yi kurmanın en iyi yolu en son paketi indirmek veya Composer kullanmaktır:
composer require tracy/tracy
Ayrıca tüm paketi tracy.phar dosyası olarak da indirebilirsiniz.
Kullanım
Tracy'yi programın başlangıcında, herhangi bir çıktı gönderilmeden önce mümkün olan en kısa sürede
Tracy\Debugger::enable()
metodunu çağırarak etkinleştiririz:
use Tracy\Debugger;
require 'vendor/autoload.php'; // veya tracy.phar
Debugger::enable();
Sayfada fark edeceğiniz ilk şey, sağ alt köşedeki Tracy Bar'dır. Görmüyorsanız, Tracy'nin üretim modunda
çalıştığı anlamına gelebilir. Tracy, güvenlik nedenleriyle yalnızca localhost'ta görünür. Çalışıp
çalışmadığını test etmek için, Debugger::enable(Debugger::Development)
parametresini kullanarak geçici
olarak geliştirme moduna geçirebilirsiniz.
Tracy Bar
Tracy Bar, sayfanın sağ alt köşesinde görüntülenen kayan bir paneldir. Fare ile hareket ettirebiliriz ve sayfa yeniden yüklendikten sonra konumunu hatırlar.

Tracy Bar'a başka yararlı paneller eklenebilir. Birçoğunu eklentilerde bulabilir veya hatta kendiniz yazabilirsiniz.
Tracy Bar'ı görüntülemek istemiyorsanız, şunu ayarlayın:
Debugger::$showBar = false;
Hataların ve İstisnaların Görselleştirilmesi
PHP'nin hataları nasıl bildirdiğini kesinlikle iyi biliyorsunuz: sayfanın kaynak koduna şöyle bir şey yazar:
Parse error: syntax error, unexpected '}' in HomePresenter.php on line 15
veya yakalanmamış bir istisna durumunda:
Fatal error: Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100 Stack trace: #0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array) #1 /sandbox/app/Forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array) #2 /sandbox/app/Presentation/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create() #3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\Presentation\Sign\SignPresenter->createComponentSignInForm('signInForm') #4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm') #5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php on line 100
Böyle bir çıktıda gezinmek pek kolay değildir. Tracy'yi açarsak, hata veya istisna tamamen farklı bir biçimde görüntülenir:

Hata mesajı kelimenin tam anlamıyla bağırıyor. Hatanın meydana geldiği vurgulanmış satırla birlikte kaynak kodunun bir bölümünü ve Call to undefined method Nette\Http\User::isLogedIn() bilgisini görüyoruz, bu da hatanın ne olduğunu açıkça açıklıyor. Ayrıca tüm sayfa canlıdır, daha fazla ayrıntıya tıklayabiliriz. Deneyin.
Ve biliyor musunuz? Bu şekilde ölümcül hataları bile yakalar ve görüntüler. Herhangi bir eklenti yüklemeye gerek kalmadan.

Değişken adındaki bir yazım hatası veya var olmayan bir dosyayı açma girişimi gibi hatalar, E_NOTICE veya E_WARNING seviyesinde mesajlar üretir. Bunlar sayfa grafiğinde kolayca gözden kaçabilir, hatta hiç görünmeyebilir (sayfa koduna bakmadıkça).

Veya hatalarla aynı şekilde görüntülenebilirler:
Debugger::$strictMode = true; // tüm hataları göster
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // kullanımdan kaldırma bildirimleri dışındaki tüm hatalar

Not: Tracy etkinleştirildikten sonra hata raporlama seviyesini E_ALL olarak değiştirir. Bu değeri değiştirmek isterseniz,
enable()
çağrısından sonra yapın.
Geliştirme vs Üretim Modu
Gördüğünüz gibi, Tracy oldukça konuşkan, bu geliştirme ortamında takdir edilebilir, ancak üretim sunucusunda tam bir felakete neden olur. Orada hiçbir hata ayıklama bilgisi yazdırılmamalıdır. Bu nedenle Tracy ortamın otomatik tespiti özelliğine sahiptir ve örnek canlı bir sunucuda çalıştırılırsa, hata görüntülenmek yerine günlüğe kaydedilir ve ziyaretçi yalnızca kullanıcı dostu bir mesaj görür:

Üretim modu, dump() kullanarak gönderdiğimiz tüm hata ayıklama
bilgilerinin ve tabii ki PHP tarafından üretilen tüm hata mesajlarının görüntülenmesini engeller. Bu nedenle, kodda bazı
dump($obj)
unutmuşsanız endişelenmenize gerek yok, üretim sunucusunda hiçbir şey yazdırılmaz.
Modun otomatik tespiti nasıl çalışır? Uygulama localhost'ta (yani IP adresi 127.0.0.1
veya ::1
)
çalıştırıldığında ve bir proxy mevcut olmadığında (yani HTTP başlığı olmadığında) mod geliştirme modudur. Aksi
takdirde üretim modunda çalışır.
Geliştirme modunu diğer durumlarda da etkinleştirmek istersek, örneğin belirli bir IP adresinden erişen programcılar
için, bunu enable()
metodunun parametresi olarak belirtiriz:
Debugger::enable('23.75.345.200'); // IP adresleri dizisi de belirtilebilir
IP adresini bir çerezle birleştirmenizi kesinlikle öneririz. tracy-debug
çerezine gizli bir belirteç,
örneğin secret1234
kaydederiz ve bu şekilde geliştirme modunu yalnızca belirli bir IP adresinden erişen ve
çerezde belirtilen belirtece sahip olan programcılar için etkinleştiririz:
Debugger::enable('secret1234@23.75.345.200');
Geliştirme/üretim modunu ayrıca Debugger::Development
veya Debugger::Production
sabitini
enable()
metodunun parametresi olarak kullanarak doğrudan ayarlayabiliriz.
Nette Framework kullanıyorsanız, onun için modu nasıl ayarlayacağınıza bakın ve bu daha sonra Tracy için de kullanılacaktır.
Hata Günlüklemesi
Üretim modunda, Tracy tüm hataları ve yakalanan istisnaları otomatik olarak bir metin günlüğüne kaydeder.
Günlüklemenin gerçekleşebilmesi için, günlükleme dizinine mutlak yolu $logDirectory
değişkenine ayarlamamız
veya enable()
metodunun ikinci parametresi olarak iletmemiz gerekir:
Debugger::$logDirectory = __DIR__ . '/log';
Hata günlüklemesi son derece yararlıdır. Uygulamanızın tüm kullanıcılarının aslında ücretsiz olarak hata bulmada mükemmel bir iş çıkaran beta testçileri olduğunu hayal edin ve onların değerli raporlarını fark edilmeden çöp kutusuna atarak aptallık yapmış olursunuz.
Kendi mesajımızı veya yakaladığınız bir istisnayı günlüğe kaydetmemiz gerekirse, bunun için log()
metodunu kullanırız:
Debugger::log('Beklenmedik bir hata oluştu'); // metin mesajı
try {
kritikOperasyon();
} catch (Exception $e) {
Debugger::log($e); // istisna da günlüğe kaydedilebilir
// veya
Debugger::log($e, Debugger::ERROR); // e-posta bildirimi de gönderir
}
Tracy'nin E_NOTICE
veya E_WARNING
gibi PHP hatalarını ayrıntılı bilgilerle (HTML raporu)
günlüğe kaydetmesini istiyorsanız, Debugger::$logSeverity
ayarlayın:
Debugger::$logSeverity = E_NOTICE | E_WARNING;
Gerçek bir profesyonel için hata günlüğü önemli bir bilgi kaynağıdır ve her yeni hatadan hemen haberdar olmak ister. Tracy bu konuda ona yardımcı olur, çünkü günlükteki yeni bir kayıt hakkında e-posta ile bilgi verebilir. E-postaların nereye gönderileceğini $email değişkeni ile belirleriz:
Debugger::$email = 'admin@example.com';
Tüm Nette Framework'ü kullanıyorsanız, bunu ve diğer ayarları yapılandırma dosyasında ayarlayabilirsiniz.
Ancak e-posta gelen kutunuzu doldurmamak için her zaman yalnızca bir mesaj gönderir ve email-sent
adlı
bir dosya oluşturur. Geliştirici, e-posta bildirimini aldıktan sonra günlüğü kontrol eder, uygulamayı düzeltir ve izleme
dosyasını siler, böylece e-posta gönderimi yeniden etkinleştirilir.
Düzenleyicide Açma
Hata sayfası görüntülendiğinde, dosya adlarına tıklayabilirsiniz ve bunlar düzenleyicinizde ilgili satırda imleçle
açılır. Ayrıca dosyalar oluşturabilir (eylem create file
) veya içlerindeki hataları düzeltebilirsiniz (eylem
fix it
). Bunun çalışması için tarayıcıyı ve sistemi
yapılandırmanız yeterlidir.
Desteklenen PHP Sürümleri
Tracy | PHP ile uyumlu |
---|---|
Tracy 2.10 – 3.0 | PHP 8.0 – 8.4 |
Tracy 2.9 | PHP 7.2 – 8.2 |
Tracy 2.8 | PHP 7.2 – 8.1 |
Tracy 2.6 – 2.7 | PHP 7.1 – 8.0 |
Tracy 2.5 | PHP 5.4 – 7.4 |
Tracy 2.4 | PHP 5.4 – 7.2 |
Son yama sürümü için geçerlidir.
Portlar
Bu, diğer frameworkler ve CMS'ler için resmi olmayan portların bir listesidir:
- Drupal 7
- Laravel framework: recca0120/laravel-tracy, whipsterCZ/laravel-tracy
- OpenCart
- ProcessWire CMS/CMF
- Slim Framework
- Symfony framework: kutny/tracy-bundle, VasekPurchart/Tracy-Blue-Screen-Bundle
- Wordpress