Tracy ile Başlarken

Tracy kütüphanesi günlük PHP programcıları için yararlı bir yardımcıdır. Size yardımcı olur:

  • hataları hızla tespit edin ve düzeltin
  • günlük hataları
  • değişkenlerin dökümü
  • komut dosyalarının/sorguların yürütme süresini ölçme
  • bellek tüketimine bakın

PHP, programcılara büyük esneklik sağladığı için zor tespit edilebilen hatalar yapmak için mükemmel bir dildir. Tracy\Debugger bu nedenle daha değerlidir. Teşhis araçları arasında nihai bir araçtır. Eğer Tracy ile ilk kez tanışıyorsanız, inanın bana, hayatınız Tracy'den önceki ve onunla olan olarak ikiye ayrılmaya başlar. İyi kısma hoş geldiniz!

Kurulum ve Gereksinimler

Tracy'yi kurmanın en iyi yolu en son paketi indirmektir veya Composer'ı kullanmaktır:

composer require tracy/tracy

Alternatif olarak, tüm paketi veya tracy.phar dosyasını indirebilirsiniz.

Kullanım

Tracy'yi etkinleştirmek kolaydır. Tercihen kütüphane yüklemesinden hemen sonra ( require 'vendor/autoload.php' gibi) ve tarayıcıya herhangi bir çıktı gönderilmeden önce bu iki kod satırını eklemeniz yeterlidir:

use Tracy\Debugger;

Debugger::enable();

Web sitesinde fark edeceğiniz ilk şey bir Tracy Bar.

(Hiçbir şey görmüyorsanız, Tracy üretim modunda çalışıyor demektir. Güvenlik nedeniyle, Tracy yalnızca localhost üzerinde görülebilir. enable() yönteminin ilk parametresi olarak Debugger::Development adresini geçerek Tracy'yi geliştirme modunda çalışmaya zorlayabilirsiniz).

enable() hata raporlama seviyesinin E_ALL olarak değiştirilmesini içerir.

Tracy Bar

Tracy Çubuğu yüzen bir paneldir. Bir sayfanın sağ alt köşesinde görüntülenir. Fareyi kullanarak hareket ettirebilirsiniz. Sayfa yeniden yüklendikten sonra konumunu hatırlayacaktır.

Tracy Bar'a başka kullanışlı paneller ekleyebilirsiniz. İlginç olanları eklentilerde bulabilir veya kendiniz oluşturabilirsiniz.

Tracy Bar'ı göstermek istemiyorsanız, ayarlayın:

Debugger::$showBar = false;

Hata ve İstisnaların Görselleştirilmesi

PHP'nin hataları nasıl raporladığını biliyorsunuzdur: sayfanın kaynak kodunda buna benzer bir şey vardır:

Parse error:  syntax error, unexpected '}' in HomePresenter.php on line 15

veya yakalanmamış istisna:

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/presenters/SignPresenter.php(21): App\Forms\SignFormFactory->create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\Presenters\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

Bu çıktıda gezinmek o kadar kolay değildir. Tracy'yi etkinleştirirseniz, hem hatalar hem de istisnalar tamamen farklı bir biçimde görüntülenir:

Hata mesajı tam anlamıyla çığlık atıyor. Kaynak kodun bir bölümünü, hatanın oluştuğu vurgulanmış satırla birlikte görebilirsiniz. Bir mesaj hatayı net bir şekilde açıklıyor. Sitenin tamamı etkileşimlidir, deneyin.

Ve ne var biliyor musunuz? Ölümcül hatalar da aynı şekilde yakalanır ve görüntülenir. Herhangi bir uzantı yüklemenize gerek yok (canlı örnek için tıklayın):

Bir değişken adındaki yazım hatası veya var olmayan bir dosyanın açılmaya çalışılması gibi hatalar E_NOTICE veya E_WARNING düzeyinde raporlar oluşturur. Bunlar kolayca gözden kaçabilir ve/veya bir web sayfası grafik düzeninde tamamen gizlenebilir. Tracy'nin bunları yönetmesine izin verin:

Ya da hatalar gibi görüntülenebilirler:

Debugger::$strictMode = true; // tüm hataları görüntüle
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // deprecated bildirimleri hariç tüm hatalar

Bir nesneye atama yaparken yazım hatalarını tespit etmek için Nette\SmartObject özel liğini kullanıyoruz.

Üretim Modu ve Hata Günlüğü

Gördüğünüz gibi, Tracy oldukça güzel konuşuyor. Bir geliştirme ortamında takdir edilir, ancak bir üretim sunucusunda bir felakete neden olur. Herhangi bir hata ayıklama bilgisi orada listelenemez. Bu nedenle Tracy'nin bir ortam otomatik algılama ve günlüğe kaydetme işlevi vardır. Tracy kendini göstermek yerine bilgileri bir günlük dosyasına kaydeder ve ziyaretçiye kullanıcı tarafından anlaşılabilir bir sunucu hata mesajı gösterir:

Üretim çıktı kipi, dump() aracılığıyla gönderilen tüm hata ayıklama bilgilerini ve elbette PHP tarafından üretilen tüm hata iletilerini bastırır. Dolayısıyla, kaynak kodda dump($obj) adresini unutsanız bile, üretim sunucunuzda bu konuda endişelenmenize gerek yoktur. Hiçbir şey görülmeyecektir.

Çıktı modu Debugger::enable()'un ilk parametresi tarafından ayarlanır. Debugger::Production veya Debugger::Development sabitini belirtebilirsiniz. Diğer bir seçenek ise, uygulamaya tracy-debug çerezinin tanımlanmış bir değeri ile tanımlanmış bir IP adresinden erişildiğinde geliştirme modunun açık olacağı şekilde ayarlamaktır. Bunu başarmak için kullanılan sözdizimi cookie-value@ip-address şeklindedir.

Belirtilmezse, varsayılan değer olan Debugger::Detect kullanılır. Bu durumda, sistem bir sunucuyu IP adresine göre algılar. Bir uygulamaya genel bir IP adresi üzerinden erişiliyorsa üretim modu seçilir. Yerel bir IP adresi geliştirme moduna yol açar. Çoğu durumda modu ayarlamak gerekli değildir. Uygulamayı yerel sunucunuzda veya üretimde başlattığınızda mod doğru şekilde tanınır.

Üretim modunda, Tracy tüm hataları ve istisnaları otomatik olarak bir metin günlüğüne kaydeder. Aksini belirtmediğiniz sürece, log/error.log dosyasında saklanacaktır. Bu hata günlüğü son derece kullanışlıdır. Uygulamanızın tüm kullanıcılarının aslında betatesters olduğunu düşünün. Hataları avlarken ücretsiz olarak son teknoloji bir iş yapıyorlar ve onların değerli raporlarını fark etmeden bir geri dönüşüm kutusuna atarsanız aptallık etmiş olursunuz.

Kendi mesajlarınızı veya yakalanan istisnaları günlüğe kaydetmeniz gerekiyorsa, log() yöntemini kullanın:

Debugger::log('Beklenmeyen hata'); // metin mesajı

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // günlük istisnası
	// veya
	Debugger::log($e, Debugger::ERROR); // ayrıca bir e-posta bildirimi gönderir
}

Hata kaydı için bir dizin enable() yönteminin ikinci parametresiyle ayarlanabilir:

Debugger::enable(Debugger::Detect, __DIR__ . '/mylog');

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 olarak ayarlayın:

Debugger::$logSeverity = E_NOTICE | E_WARNING;

Gerçek bir profesyonel için hata günlüğü çok önemli bir bilgi kaynağıdır ve herhangi bir yeni hatadan hemen haberdar olmak ister. Tracy ona yardımcı olur. Her yeni hata kaydı için bir e-posta gönderebilir. Bu e-postaların nereye gönderileceği $email değişkeni ile belirlenir:

Debugger::$email = 'admin@example.com';

Nette Framework'ün tamamını kullanıyorsanız, bunu ve diğerlerini yapılandırma dosyasında ayarlayabilirsiniz.

E-posta kutunuzu selden korumak için Tracy sadece bir mesaj gönderir ve bir dosya oluşturur email-sent. Bir geliştirici e-posta bildirimini aldığında, günlüğü kontrol eder, uygulamasını düzeltir ve email-sent izleme dosyasını siler. Bu, e-posta gönderimini tekrar etkinleştirir.

Dosyaları Düzenleyicide Açma

Hata sayfası görüntülendiğinde, dosya adlarına tıklayabilirsiniz ve imleç ilgili satırda olacak şekilde editörünüzde açılırlar. Dosyalar da oluşturulabilir (eylem create file) veya içlerindeki hatalar düzeltilebilir (eylem fix it). Bunu yapmak için tarayıcıyı ve sistemi yapılandırmanız gerekir.

Desteklenen PHP Sürümleri

Tracy PHP ile uyumlu
Tracy 2.10 – 3.0 PHP 8.0 – 8.2
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

En son yama sürümleri için geçerlidir.

Limanlar

Bu, diğer çerçevelere ve CMS'ye resmi olmayan bağlantı noktalarının bir listesidir: