Hata ayıklama, programlamadaki en önemli süreçlerden biridir. Bir hata ayıklayıcı yardımıyla programda neler olduğunu, hangi işlevlerin yürütüldüğünü, değişkenlerde nelerin depolandığını görebilir, her şeyi adım adım yürütebilir ve tam olarak hangi satırda ve değişkenlerin hangi değerlerinde bir hata oluştuğunu anlayabilirsiniz.
Örneğin, Xdebug hata ayıklayıcı PHP için kullanılır, PHPStorm en popüler geliştirme ortamlarından biridir. Şimdi yerel bilgisayarda ve Docker'da hata ayıklama için PhpStorm'da Xdebug'ın nasıl yapılandırılacağını görelim.
Şimdi yerel sunucuda hata ayıklamanın nasıl yapıldığından bahsedelim.
Örnek olarak Ubuntu ve Apache ile yapılandırılmış PHP yorumlayıcısını kullanarak tüm sürece bakalım. Diğer yapılandırmalar için dosya yolları farklı olabilir, ancak konu aynıdır. Xdebug hata ayıklayıcısı kod yürütmeyi duraklatmanıza, çağrı yığınını ve değişkenlerin içeriğini görüntülemenize olanak tanır. Tek dezavantajı uygun bir kontrol arayüzünün olmamasıdır. IDE'ler genellikle hata ayıklamayı yönetmek için kullanılır. Ancak IDE hata ayıklayıcıya hata ayıklamaya başlamasını söyleyemez çünkü sadece koddan sorumludur. Bu amaçla, hata ayıklama modunu etkinleştirebileceğiniz Debug Helper tarayıcı uzantısına ihtiyacınız olacaktır.
Öncelikle Xdebug'ı yüklemeniz gerekir. Bunu yapmak için çalıştırın:
$ sudo apt install xdebug
Xdebug yükleme işlemi tamamlandıktan sonra, programı bir hata ayıklama oturumu başlattığınızda hata ayıklamayı kontrol etmek için IDE'mize bağlanmaya çalışacak şekilde yapılandırmalısınız. Bunu yapmak için, Xdebug 2 sürümünde /etc/php/7.4/apache2/conf.d/20-xdebug.ini
dosyasına bu satırları ekleyin:
$ sudo vi /etc/php/7.4/apache2/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=false
Daha yeni bir sürüm için farklı bir format kullanmak en iyisidir:
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9000
Şimdi ayarlara daha yakından bakalım. İlk parametre xdebug.mode
- hata ayıklama modu, olası seçenekler şunlardır:
develop
- ek bilgi çıktısını etkinleştirir, var_dump'ı geçersiz kılar;
debug
- satır satır kod yürütme modu, bu durumda ihtiyacımız olan mod budur;
profile - profil
oluşturma;
trace
- program yürütmesininizlenmesi
.
Virgül içinde listelendiğinde birkaç mod aynı anda etkinleştirilir. İkinci satır xdebug.start_with_request hata ayıklama, izleme ve benzer modlar için hata ayıklayıcının nasıl başlatılacağını tanımlar:
Üçüncü xdebug.discover_client_host
true olarak ayarlanır, bu durumda xdebug HTTP_X_FORWARDED_FOR
başlığında geçen ana bilgisayara bağlanmaya çalışır. Ana bilgisayar bir sonraki satırda belirtildiğinden, bu durumda bu özelliğe gerek yoktur. Ardından, hata ayıklama kontrolü için bağlanılacak istemci ana bilgisayarı 127.0.0.1 ve bağlantı noktası 9000'dir. Bu şu anda PhpStorm'da kullanılan varsayılan porttur. Ayarları kaydettikten sonra, özel bir komut kullanarak Apache'yi yeniden başlatmanız gerekir:
$ sudo systemctl restart apache2
Daha sonra, PhpStorm'u yapılandırmalısınız. Programı çalıştırın, ardından Çalıştır -> Yapılandırmaları Düzenle menüsünü açın. Hata ayıklayıcıyı yapılandırmanız gereken bir pencere göreceksiniz.
düğmesine tıklayın ve açılan listeden PHP Remote Debugger'ı seçin:
Ayarlarda herhangi bir değişiklik yapmayın, sadece bu hata ayıklama yönteminin adını belirtin. Hangi sunucudan bağlantı bekleneceğini belirtmezseniz, tüm bağlantılar kabul edilecektir.
Xdebug'ın bağlanacağı portu değiştirmek istiyorsanız, Dosya -> Ayarlar -> PHP -> Hata Ayıklama -> DBGp Proxy'yi açın. Burada istediğiniz portu belirtebilirsiniz.
Artık IDE'nin hazır olduğunu söyleyebiliriz. Şimdi üst araç çubuğundaki hataya tıklayın. Program hata ayıklayıcının bağlanmasını beklemeye başlayacak ve biz de kodun bulunduğu satırın önüne tıklayarak koda bazı kesme noktaları koyacağız:
Şimdi geriye kalan tek şey tarayıcıyı yapılandırmak.Chrome için özel bir uzantı indirebilirsiniz. Yükleyin ve hata ayıklamak istediğiniz sayfayı açın. Uzantı simgesine tıklayın ve Hata Ayıkla'yı seçin. Uzantı simgesi yeşile dönecektir:
Sayfayı yenileyin ve PHPStorm'a geri dönün. Her şey doğru yapıldıysa, orada bir hata ayıklama oturumu başlayacaktır. İlk çalıştırmada, program sizden yerel dosya yollarını uzak dosya yollarıyla eşleşecek şekilde yapılandırmanızı isteyebilir. Yerel sunucu için burada herhangi bir yapılandırma yapmanıza gerek yoktur, sadece Kabul Et'e tıklayın:
Bundan sonra hata ayıklayıcı seçilen kesme noktasında yürütmeyi durduracak ve hata ayıklama arayüzü programda görünecektir:
Şimdi Xdebug PhpStorm ve Docker'ın nasıl yapılandırılacağını anlayalım.
Docker biraz zor olabilir. Hata ayıklayıcının IDE'nin kendisine bağlanması gerektiğinden, ana bilgisayarı konteynere yönlendirmeniz gerekir. Windows'ta bu, host.docker.internal adresi kullanılarak yapılabilir. Ancak Linux'ta bu varsayılan olarak gerçekleşmez. Böyle bir adres eklemek için docker-compose'a aşağıdaki satırları eklemeniz gerekir:
extra_hosts:
host.docker.internal: host-gateway
Aşağıdaki dizin yapısını kullanıyoruz:
Minimum gerekli docker-compose.yaml
aşağıdaki gibi görünecektir:
version: '3.5'
networks:
losst-network:
services:
nginx:
image: nginx
ports:
- '8094:80'
volumes:
- ./www/:/var/www/
- ./conf/nginx:/etc/nginx/conf.d
networks:
- losst-network
php-fpm:
build:
context: ./conf/php-fpm
extra_hosts:
host.docker.internal: host-gateway
volumes:
- ./www:/var/www/
networks:
- losst-network
Basitçe iki konteyner bildiriyoruz, nginx ve php-fpm
. Birincisinde herhangi bir değişiklik yapmıyoruz, bu yüzden sadece resmi imajı alabilir, kaynak klasörünü, yapılandırma dosyasını ve bağlantı noktasını iletebiliriz. İkinci kapsayıcıda Xdebug'ı kurmak ve yapılandırmak gerekir, bu nedenle resmi php kapsayıcısı temelinde inşa edilmesi gerekecektir. Aynı konteyner için extra_hosts
direktifini belirtmek gerekir, bu olmadan hiçbir şey çalışmayacaktır. Nginx yapılandırması da oldukça standarttır:
server {
listen 80;
server_name _ !default;
root /var/www/;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 404 /index.php;
location ~ .php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP betiklerinin php-fpm konteynerinde işlenmesini bu şekilde yapılandırırsınız ve var olmayan URL'leri index.
php'ye yönlendirirsiniz, bu da birçok çerçeve ve CMS için oldukça standarttır. php-fpm konteynerinin Dockerfile'ında şu şekilde görünür:
pecl kullanarak xdebug'ı yükleyin ve ardından yapılandırma dosyasını konteynere kopyalayın. Dosya:
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = host.docker.internal
xdebug.client_port = 9000
PHP 8 için Xdebug 3 konteynere yüklenir, çünkü eski sürüm artık dilin bu sürümüyle çalışmaz, bu nedenle yeni yapılandırma sözdizimi kullanılır. Eskiden docker-compose
.yaml dosyasında belirtilen host, host.docker.internal
. xdebug PHPStorm docker yapılandırması artık tamamlandı. Ardından, projeyi çalıştırabilirsiniz:
docker-compose up --build
Şimdi, önceki seçenekte olduğu gibi tarayıcıda hata ayıklama modunu etkinleştirebilir, sayfayı yenileyebilir ve Docker'da çalışıyor olmasına rağmen hata ayıklayıcı IDE'ye başarıyla bağlanacaktır