Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Sıfırdan PHP Hata Ayıklayıcı Yapmanın Teknik Süreci
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Sıfırdan PHP Hata Ayıklayıcı Yapmanın Teknik Süreci

Yazılım

Sıfırdan PHP Hata Ayıklayıcı Yapmanın Teknik Süreci

teknomers
Son güncelleme: 30 Mart 2026 18:45
teknomers
Paylaş
Paylaş

Başlangıç

PHP ve Laravel ile yıllardır çalışıyorum. Her PHP geliştiricisi gibi, o klasik döngüden geçtim: Xdebug’ı kurmak, xdebug.mode=debug ayarını yapmak, PHPStorm’da yolları eşlemek, Docker’ın iç ağ IP’sinin değişmeyeceğini umarak dua etmek ve sonunda çalıştığında… çok yavaş. Her istek saniyeler alıyor.

Ancak gerçek sorun asla performans değildi. Sorun kurulumdu. Docker’da Laravel Sail üzerinden çalışan projelerle, başka projeler WSL’de, bazıları ise staging’e SSH ile bağlanıyordu. Her ortam, farklı bir Xdebug yapılandırması gerektiriyordu. Ağ değişti mi? Yeniden yap. Yeni bir konteyner başlattın mı? Yolları yeniden eşle. Farklı bir makineye geçtin mi? Sıfırdan başla.

Dönüm noktası bir Pazar günüydü. Bir Laravel projesinde üretim hatasıyla hızlıca ilgilenmem gerekiyordu ve Xdebug’ın Docker üzerinden bağlanmasını sağlamak için 40 dakika harcadım. Nihayet bağlandığında, kırılma noktası yanlış satıra düştü çünkü yol eşlemesi bir seviye kaymıştı. O anda düşündüm: “Bu kadar zor olmamalı. Ya hata ayıklayıcı hiç uzantı gerektirmeden çalışıyorsa? Ya kodun bir parçası olursa?”

DDLess böyle doğdu.


İterasyon 1: phpdbg

Kodu enjekte etmeden önceki ilk fikrim var olan bir şeyi kullanmaktı. PHP’nin phpdbg adında, entegre bir etkileşimli hata ayıklayıcısı var. Zend Engine opcode’larını kullanıyor, hızlı ve uzantı gerektirmiyor. Mükemmel görünüyordu.

Ancak sorun şu ki, phpdbg terminalde etkileşimli olacak şekilde tasarlanmış. Dış bir UI ile entegrasyon için temiz bir iletişim protokolü yok. Grafiğe bir arayüzle çalışması için metin çıktısını ayrıştırmam gerekecekti ve bu PHP sürümleri arasında değişiyor. Dahası, Laravel Sail veya Docker gibi ortamlarda iyi çalışmıyor çünkü süreç giriş noktası olması gerekiyor ve bu durum web sunucusu varsa çalışmıyor.

Birkaç saat içinde bu yolun uyumluluk çukuru haline geleceğini anladım ve bunu bıraktım.


İterasyon 2: Regex ve Tokenizer

Bir sonraki fikir: Hata ayıklama çağrılarını doğrudan PHP koduna enjekte etsem? Belki her çalıştırılabilir satırdan önce bir ddless_step_check(__FILE__, __LINE__) gibi. PHP bu değiştirilmiş kodu çalıştırırsa, uzantıya ihtiyaç duymadan yürütme akışının tam kontrolüne sahip olurdum.

İlk adım, “enjeksiyon yapılabilir” satırları bulmaktı, yani kırılma noktasını koymanın mantıklı olduğu yerler. Bir yoruma, bir sınıf beyanına veya çok satırlı bir dizenin ortasında bir kırılma noktası koymanın bir anlamı yok.

İlk uygulamam PHP’nin token_get_all() fonksiyonunu kullanarak kodu tokenize etti ve nerede enjekte edileceğine karar vermek için regex ile bir durum makinesi oluşturdu. Bu, basit durumlar için çalışıyordu:

$x = 1;           // enjekte edilebilir
echo $x;          // enjekte edilebilir
if ($x > 0) {     // enjekte edilebilir

Ama kenar durumlar sonsuzdu. Çok satırlı zincirleme metod çağrıları:

$query->where('status', 'active')
      ->orderBy('created_at')  // devam, yeni bir ifade değil
      ->get();

İçinde PHP kodu bulunan heredoc/nowdoc dizeleri. Kapatma ] işaretinin bir sonraki satırda olduğu çok satırlı diziler. elseif gibi özel işlemler gerektiren durumlar, çünkü bir elseif öncesinde bir enjeksyon yapmak, if zincirini bozar. Aynı durum else, catch ve finally için de geçerli.

660 satıra yakın kod gerekli oldu ddless_analyze_code_tokens(), ddless_is_safe_to_inject_before(), ve birkaç yardımcı fonksiyon arasında. Her hafta yeni bir durum, her şeyi bozdu. Bir geliştirici farklı bir kodlama kalıbı kullandığında, enstrümantasyon bir sözdizimi hatası oluşturuyordu.

İnşaatımı kum üzerine kurduğumu biliyordum. Ama bir süre çalıştı ve ana fikrin – kod enstrümantasyonu ve dosya tabanlı IPC’nin birleşimi – uygulanabilir olduğunu doğrulamama izin verdi.


Daha fazlasını görmek için: https://ddless.com/blog/technical-journey-building-php-debugger

Kaynak: Orijinal Makale

Contents
  • Başlangıç
  • İterasyon 1: phpdbg
  • İterasyon 2: Regex ve Tokenizer
Ham SQL Tarih Fonksiyonlarını Kullanmayı Neden Bıraktım ve Laravel’de Carbon’a Geçtim
PHP’de Mesafe Hesaplamayın: Laravel’de PostGIS Ustası Olun 🗺️
Sorgu oluşturucusunun ham SQL sorgusunu bir dize olarak nasıl elde edebilirim?
Laravel ile Hata Uyarılarını Telegram, Slack ve Discord’a Gönderen Bir Paket Nasıl Geliştirdim
2026’da Laravel Dağıtım Durumu: Neler Değişti ve Hala Ne Zorlayıcı?
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Gartner’in Sormanız Gereken Acil 7 Siber Güvenlik Sorusu
Sonraki Makale Apple e-posta adresini uygulamalardan ve sitelerden gizleyecek ama polisten değil

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Acil: SOC’ların Sadece %10’u AI’dan Mükemmel Değer Aldığını Söylüyor
Siber Güvenlik
Laravel admin araçlarında sürükle-bırak sıralama, göründüğünden daha hızlı karmaşık hale geliyor.
Yazılım
Renkli Yedek Parçalarla MacBook Neo’yu Kişiselleştirdim
Liste
OpenAI ve Anthropic: Rekabetteki Yatırımcıların Gizli Birlikteliği
Genel
Elegoo’nun Emoji markasıyla sıradışı 3D yazıcı iş birliği 489$
Donanım
Valorant Oyuncuları Oyun İçi DDoS Saldırılarıyla Karşılaşmakta
Oyun
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?