SlideShare a Scribd company logo
xD bug - jak debugować
PHP-owe aplikacje (Xdebug)
Marcin Tracz
Software developer w Blumilk
marcin.tracz@blumilk.pl
Agenda
➔ Debugowanie interaktywne i nie interaktywne
➔ Xdebug - co i jak
➔ Xdebug - instalacja
➔ Xdebug - konfiguracja
➔ Xdebug - wywołanie sesji debugowania (WEB)
➔ PHPStorm konfiguracja
➔ Visual Studio Code konfiguracja
➔ Xdebug - wywołanie sesji debugowania (CLI)
➔ Xdebug, PHPStorm, Docker
➔ PHPStorm debugowanie testów, skryptów
➔ Zdalne debugowanie
◆ SSH
◆ NGROK
◆ Xdebug Cloud
◆ DBGproxy
➔ Xdebug alternatywy
Debugowanie aplikacji PHP
interactive debugging
non-interactive debugging
Xdebug?
Nie działa to debagołanie
Xdebug - ogólny zarys
➔ Derick Rethans
➔ 2002 rok
➔ open source
➔ PHP extension (PECL package https://pecl.php.net/package/xdebug)
➔ https://xdebug.org/
➔ https://github.com/xdebug/xdebug
➔ aktualne stabilne wydanie na dzień 9.11.2022: 3.1.6 (z dnia 8.11.2022)
➔ aktualne beta wydanie na dzień 5.11.2022: 3.2.0RC1 (z dnia 10.10.2022)
➔ pierwsze wydanie: 0.6.0 (z dnia 25.04.2002)
https://github.com/xdebug/xdebug/releases/tag/0.6.0
https://github.com/xdebug/xdebug/tags?after=1.2.0rc2
Protokół DBGp
Specyfikacja protokołu:
https://xdebug.org/docs-dbgp.php
Wersja: 1.0
Autorzy:
- Shane Caraveo, ActiveState
- Derick Rethans
Protokół zapewnia komunikację między silnikiem debuggera (np. Xdebug),
a IDE debuggera (np. PHPStorm, VS Code).
Silnik debugera (Xdebug) inicjuje sesję debugowania.
Silnik debuggera nawiązuje połączenie z nasłuchującym IDE, a następnie czeka, aż IDE zainicjuje polecenia.
Protokół DBGp
SERVER
CLIENT
Jak to działa?
1. IDE nasłuchuje na porcie 9000
2. Użytkownik wysyła request
inicjując sesję debugowania, do
Xdebug. (parametr
XDEBUG_SESSION_START)
3. Xdebug rozpoczyna sesję
debugowania i próbuje nawiązać
połączenie do IDE. Wysyła pakiet
INIT i czeka. Nie wykonuje
jeszcze żadnego kodu.
4. IDE negocjuje funkcje lub ustawia
dowolne punkty przerwania
5. IDE wysyła polecenia, aby
interaktywnie przechodzić przez
kod
Xdebug v2 config params!
źródło https://crosp.net/blog/software-development/web/php/understanding-and-using-xdebug-with-phpstorm-and-magento-remotely/
Jak to działa?
źródło https://crosp.net/blog/software-development/web/php/understanding-and-using-xdebug-with-phpstorm-and-magento-remotely/
Xdebug v2 config params!
Xdebug - a wersje PHP
źródło https://xdebug.org/docs/compat#versions
Instalacja
https://xdebug.org/docs/install
Linux:
Windows:
Instalacja - przez PECL
Instalacja
!
Wyłączenie OPcache:
xdebug_info();
xdebug_info();
Wywołanie sesji debugowania - WEB
➔ parametr GET/POST, XDEBUG_SESSION, XDEBUG_SESSION_START, XDEBUG_TRIGGER
➔ ręczne dodanie ciastka (cookie) XDEBUG_SESSION
z pomocą przychodzą wtyczki w przeglądarkach
◆ Xdebug Helper - Firefox
◆ Xdebug helper - Chrome
◆ Xdebug helper - Microsoft Edge
◆ XDebugToggle - Safari
➔
Xdebug będzie zawsze próbował zainicjować sesję debugowania
Aby wyłączyć sesję debugowania, usuń ciastko, lub wyłącz z poziomu wtyczki w przeglądarce.
Ewentualnie parametr XDEBUG_SESSION_STOP
Debugging Clients
źródło https://xdebug.org/docs/step_debug
Konfiguracja - PHPStorm (2022.2.3)
Konfiguracja - PHPStorm
Konfiguracja - PHPStorm
NIE nasłuchuje na połączenia Xdebug Nasłuchuje na połączenia Xdebug
Konfiguracja - PHPStorm
Konfiguracja - PHPStorm
Znów nie działa to debagołanie. Pokaż, nosz kur**
Może płyty nie ma?
Konfiguracja - Xdebug.ini
Konfiguracja - PHPStorm
Konfiguracja - PHPStorm
PHPStorm - opcje Xdebug
https://www.jetbrains.com/help/phpstorm/debug-tool-window.html
1
2
3
PHPStorm - opcje Xdebug
Konfiguracja
Konfiguracja
Konfiguracja - Visual Studio Code
Konfiguracja - Visual Studio Code
Konfiguracja - Visual Studio Code
1 2
3
Konfiguracja - Visual Studio Code
Wywołanie sesji debugowania - CLI
➔ env variable, XDEBUG_SESSION, XDEBUG_TRIGGER, XDEBUG_CONFIG
wartość tych zmiennych nie ma znaczenia, dopóki nie ustawisz ręcznie xdebug.trigger_value
Wywołanie sesji debugowania - CLI
Wywołanie sesji debugowania - CLI
Debugowanie skryptów CLI, np. kolejki
JOB
REDIS
JOB
JOB
KOLEJKA
Debugowanie skryptów CLI - PHPStorm way
Debugowanie skryptów CLI - PHPStorm way
Wywołanie sesji debugowania podczas błędu
kiedy wystąpi: PHP Notice lub Warning
kiedy zostanie rzucony wyjątek: Throwable (Error lub Exception)
Mam 2 aplikacje backendowe - co robić, jak żyć?
app1 app2
HTTP request
+ poprawna konfiguracja
client_host
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
Xdebug, PHPStorm, Docker
LOCAL
DOCKER NETWORK
PHP APP in
container
HOST?
LOCALHOST
HOST address inside Docker
HOST address inside Docker
Mac: host.docker.internal / docker.for.mac.host.internal (replaces docker.for.mac.localhost)
Windows: host.docker.internal / docker.for.win.host.internal (replaces docker.for.win.localhost)
Linux: host.docker.internal
- Windows/Mac
Docker version >= 18.03
- Linux
Docker version >= 20.10.0
host.docker.internal
https://github.com/moby/moby/pull/40007
HOST address inside Docker
Windows
Mac
Linux
HOST address inside Docker
host.docker.internal:host-gateway
BEZ Z
HOST address inside Docker
PHPStorm, Docker, Xdebug
HOST address inside Docker
https://docs.docker.com/desktop/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
host-gateway in Docker on Linux
https://github.com/docker/cli/blob/master/opts/hosts.go
IP Hosta w kontenerze
PHPStorm debugowanie testów
PHPStorm debugowanie testów
CLI debugowanie testów
PHPStorm debugowanie widoków Blade
/storage/framework/views
PHPStorm debugowanie widoków Blade
Xdebug a wydajność aplikacji?
Xdebug spowalnia wydajność aplikacji!
“XDebug checks each HTTP request for the existance of a specific URL
parameter or a cookie in order to determine if it should be activated or not”
Xdebug logs
Brak parametru i ciastka, do wywołania sesji debugowania!
Xdebug logs - mode debug
Xdebug logs - mode debug
Zainicjowanie sesji debugowania (parametr lub ciastko).
Xdebug logs - mode debug
Xdebug logs - mode develop
BRAK LOGÓW
Xdebug a testy?
Xdebug spowalnia testy!
Xdebug a testy?
Zdalne debugowanie
Możliwe opcje:
➔ Publiczne IP + przekierowania portów na routerze
➔ Tunel SSH (reverse SSH port forwarding)
➔ NGROK
➔ Xdebug Cloud
Jeśli jesteś w innej sieci niż serwer z aplikacją PHP, którą musisz
debugować, możesz mieć problem. Xdebug ze zdalnego serwera nie może
bezpośrednio połączyć się z Twoją maszyną przez wszystkie zapory,
routery NAT lub inną infrastrukturę sieciową.
developer
IDE
PHP app
with
Xdebug
local internet
Zdalne debugowanie - tunel SSH
1. local port forwarding
2. remote port forwarding (reverse tunneling)
źródło https://goteleport.com/blog/ssh-tunneling-explained/
źródło https://docs.devsense.com/en/vs/debugging/remote-debug-via-ssh
Opcja -R instruuje klienta SSH, aby przekazał port
9003 ze zdalnej maszyny do miejsca,
na localhost:9003, gdzie Debugger (IDE) będzie
nasłuchiwał.
E
Zdalne debugowanie - NGROK
źródło https://ngrok.com/
na dzień 7.11.2022
Xdebug Cloud - beta
https://xdebug.cloud/
➔ 2021 rok
➔ płatne
➔ tylko dla firm
➔ multi - user debugging (kilka jednoczesnych sesji debugowania)
Dokumentacja:
https://xdebug.cloud/docs
źródło: https://xdebug.cloud/signup
Xdebug Cloud - beta
Xdebug
Cloud
developer
IDE
aplikacja
(z Xdebug)
Xdebug session
trigger request
(with XDEBUG_SESSION param/cookie)
local
internet
źródło: https://xdebug.cloud/
źródło: opracowanie własne
Xdebug Cloud - cennik
Na dzień 5.11.2022 źródło: https://xdebug.cloud/signup
Xdebug Cloud - dashboard
źródło: https://www.youtube.com/watch?v=Jny-RJDf2AM
Multi user debugging - DBGproxy
źródło: https://xdebug.org/docs/dbgpProxy
źródło: https://xdebug.org/download#dbgpProxy
Multi user debugging - DBGproxy
źródło: https://blog.gougousis.net/xdebug-walkthrough/
Alternatywy dla Xdebug
debugger:
➔ Zend Debugger
paczki:
➔ Ray (Spatie) https://github.com/spatie/ray - płatne
➔ tracy (Nette) https://github.com/nette/tracy
➔ kint https://github.com/kint-php/kint/
Pytania?
marcin.tracz@blumilk.pl
Marcin Tracz

More Related Content

PDF
ALSF13: Xen on ARM - Virtualization for the Automotive Industry - Stefano Sta...
The Linux Foundation
 
PDF
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
 
PDF
Effective c++ chapter 1,2 요약
Nam Hyeonuk
 
PPTX
Web assembly - Future of the Web
CodeValue
 
PDF
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
PDF
Understaing Android EGL
Suhan Lee
 
PDF
Introduction to React Native
Sambhu Lakshmanan
 
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
ALSF13: Xen on ARM - Virtualization for the Automotive Industry - Stefano Sta...
The Linux Foundation
 
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
 
Effective c++ chapter 1,2 요약
Nam Hyeonuk
 
Web assembly - Future of the Web
CodeValue
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
Understaing Android EGL
Suhan Lee
 
Introduction to React Native
Sambhu Lakshmanan
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 

What's hot (20)

PDF
台科逆向簡報
耀德 蔡
 
PDF
Analysing in depth work manager
bhatnagar.gaurav83
 
PDF
Swift Programming Language
Giuseppe Arici
 
PDF
Virtual Machine Constructions for Dummies
National Cheng Kung University
 
PPTX
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
 
PDF
키보드 키와 기호 이름 알아보기
Changwon National University
 
PDF
Sqlアンチパターン(メタデータトリブル)
Tomoaki Uchida
 
PPTX
Progressive Lightmapper: An Introduction to Lightmapping in Unity
Unity Technologies
 
PDF
Virtualization Support in ARMv8+
Aananth C N
 
PPSX
Server Side Rendering, caching and performance
Ateev Chopra
 
ODP
Secureboot Survival Guide
lcplcp1
 
PDF
Kotlin coroutines 톺아보기
Taewoo Kim
 
PDF
SystemC Tutorial
kocha2012
 
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박
 
PDF
Learn C Programming Language by Using GDB
National Cheng Kung University
 
PPTX
Developing New Widgets for your Views in Owl
Odoo
 
PDF
Rediscovering Spring with Spring Boot(1)
Gunith Devasurendra
 
PPTX
Best practices: Async vs. coroutines - Unite Copenhagen 2019
Unity Technologies
 
PDF
Metrics-Driven Engineering
Mike Brittain
 
台科逆向簡報
耀德 蔡
 
Analysing in depth work manager
bhatnagar.gaurav83
 
Swift Programming Language
Giuseppe Arici
 
Virtual Machine Constructions for Dummies
National Cheng Kung University
 
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
 
키보드 키와 기호 이름 알아보기
Changwon National University
 
Sqlアンチパターン(メタデータトリブル)
Tomoaki Uchida
 
Progressive Lightmapper: An Introduction to Lightmapping in Unity
Unity Technologies
 
Virtualization Support in ARMv8+
Aananth C N
 
Server Side Rendering, caching and performance
Ateev Chopra
 
Secureboot Survival Guide
lcplcp1
 
Kotlin coroutines 톺아보기
Taewoo Kim
 
SystemC Tutorial
kocha2012
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
준철 박
 
Learn C Programming Language by Using GDB
National Cheng Kung University
 
Developing New Widgets for your Views in Owl
Odoo
 
Rediscovering Spring with Spring Boot(1)
Gunith Devasurendra
 
Best practices: Async vs. coroutines - Unite Copenhagen 2019
Unity Technologies
 
Metrics-Driven Engineering
Mike Brittain
 
Ad

More from Laravel Poland MeetUp (20)

PDF
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
Laravel Poland MeetUp
 
PDF
Kilka slajdów o castowaniu atrybutów w Eloquent
Laravel Poland MeetUp
 
PDF
Licencje otwartego oprogramowania
Laravel Poland MeetUp
 
PDF
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Laravel Poland MeetUp
 
PDF
Jak przemycić Shape Up do Scruma?
Laravel Poland MeetUp
 
PDF
Cykl życia zapytania HTTP (pod maską)
Laravel Poland MeetUp
 
PDF
Enumy w Laravelu - dlaczego warto stosować?
Laravel Poland MeetUp
 
PDF
Laravelowe paczki do uwierzytelniania
Laravel Poland MeetUp
 
PDF
Przegląd najciekawszych wtyczek do Laravela
Laravel Poland MeetUp
 
PDF
Walidacja w Laravelu
Laravel Poland MeetUp
 
PDF
(prawie) Wszystko o Tinkerze
Laravel Poland MeetUp
 
PDF
Laravel Dusk - prosty przepis na testy E2E
Laravel Poland MeetUp
 
PDF
Laravel Octane - czy na pewno taki szybki?
Laravel Poland MeetUp
 
PDF
Laravel Jobs i PHP8
Laravel Poland MeetUp
 
PDF
Wszystko o Laravel Livewire
Laravel Poland MeetUp
 
PDF
Laravel/PHP - zderzenie z PDFami
Laravel Poland MeetUp
 
PDF
Action-based Laravel
Laravel Poland MeetUp
 
PDF
Automatyzacja utrzymania jakości w środowisku PHP
Laravel Poland MeetUp
 
PDF
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Laravel Poland MeetUp
 
PDF
Laravel Collection - tablice na sterydach
Laravel Poland MeetUp
 
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
Laravel Poland MeetUp
 
Kilka slajdów o castowaniu atrybutów w Eloquent
Laravel Poland MeetUp
 
Licencje otwartego oprogramowania
Laravel Poland MeetUp
 
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Laravel Poland MeetUp
 
Jak przemycić Shape Up do Scruma?
Laravel Poland MeetUp
 
Cykl życia zapytania HTTP (pod maską)
Laravel Poland MeetUp
 
Enumy w Laravelu - dlaczego warto stosować?
Laravel Poland MeetUp
 
Laravelowe paczki do uwierzytelniania
Laravel Poland MeetUp
 
Przegląd najciekawszych wtyczek do Laravela
Laravel Poland MeetUp
 
Walidacja w Laravelu
Laravel Poland MeetUp
 
(prawie) Wszystko o Tinkerze
Laravel Poland MeetUp
 
Laravel Dusk - prosty przepis na testy E2E
Laravel Poland MeetUp
 
Laravel Octane - czy na pewno taki szybki?
Laravel Poland MeetUp
 
Laravel Jobs i PHP8
Laravel Poland MeetUp
 
Wszystko o Laravel Livewire
Laravel Poland MeetUp
 
Laravel/PHP - zderzenie z PDFami
Laravel Poland MeetUp
 
Action-based Laravel
Laravel Poland MeetUp
 
Automatyzacja utrzymania jakości w środowisku PHP
Laravel Poland MeetUp
 
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Laravel Poland MeetUp
 
Laravel Collection - tablice na sterydach
Laravel Poland MeetUp
 
Ad

xD bug - Jak debugować PHP-owe aplikacje (Xdebug)