SlideShare una empresa de Scribd logo
1 de 17
Debugowanie z użyciem Xdebug
         Maciej Kosiedowski
       m.kosiedowski@polskapresse.pl

               Gdynia, 19.03.2013
„W C++ o błędach powiadamia kompilator,

        natomiast w PHP klient”

                              © http://roflcopter.pl/6434
Do czego służy Xdebug?
●   Xdebug to narzędzie pozwalające debugować PHP jak każdy
    inny język programowania:
●   Wykonywać kod krok po kroku
●   Sprawdzać chwilowe wartości zmiennych
●   Wstawiać punkty przerwania (break-point)
●   Podglądać stos wywołania
●   Dodawać czujki (watch)
●   Zmieniać wartości niektórych zmiennych w czasie wykonania
●   Profilować aplikację
Konfiguracja serwera
●   Instalujemy Xdebuga ;)
●
    Dodajemy do pliku ~/.htaccess linie:
    php_value xdebug.remote_host 127.0.0.1
    php_value xdebug.remote_port 9000
    php_value xdebug.remote_enable On
    php_value xdebug.remote_handler dbgp
    php_value xdebug.remote_autostart Off
●   Dodajemy do ~/.bashrc linię:
    export XDEBUG_CONFIG='remote_host=127.0.0.1
    idekey=netbeans-xdebug'
●   Podajemy adres IP swojego komputera, jeśli korzystamy z serwera
    deweloperskiego
Konfiguracja własnego komputera
●   W momencie uruchamiania debugowania
    serwer będzie próbował połączyć się z
    naszym komputerem
●   Windows może blokować połączenia z
    serwera do IDE – w takim przypadku należy
    odpowiednio skonfigurować lub wyłączyć
    zaporę systemu Windows
Instalacja dodatku do przeglądarki
●   Firefox: easy Xdebug
    –   https://addons.mozilla.org/en-us/firefox/addon/easy-xdebug/

    –   Dostępny po zainstalowaniu na domyślnie ukrytym pasku dodatków
●   Chrome: Xdebug helper
    –   https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

●   Opera: Xdebug
    –   https://addons.opera.com/pl/extensions/details/xdebug/

●   Każdy dodatek może wymagać ustawiania w konfiguracji klucza
    debugowania konkretnego dla używanego IDE:
    –   netbeans-xdebug dla Netbeansa
    –   ECLIPSE_DBGP dla Eclipse
●   Dodatek do Chrome domyślnie ustawiony jest pod Eclipse, pozostałe pod
    Netbeansa
Konfiguracja IDE – Netbeans
●   Ustawienia debugowania:
    –   Włączamy obliczanie zmiennych i chmurek
Konfiguracja IDE - Netbeans
●   Ustawiamy projekt
    –   Właściwości projektu → Run Configuration → Advanced
    –   Wyłączamy otwieranie przeglądarki
    –   Dodajemy mapowanie ścieżek jeśli działamy na
        serwerze deweloperskim
Debugowanie – Netbeans
●   Uruchamiamy sesję debugowania w
    Netbeansie za pomocą przycisku
●   Uruchamiamy sesję debugowania w dodatku
    przeglądarki
●   Wstawiamy punkt przerwania
●   Odświeżamy stronę
Debugowanie – pokaz na żywo
Profilowanie - konfiguracja
●   Dodajemy do ~/.htaccess:
    php_value xdebug.profiler_enable 0

    php_value xdebug.profiler_enable_trigger 1

    php_value xdebug.profiler_output_dir '/home/login/cachegrind/'

    php_value xdebug.profiler_output_name 'cachegrind.out.%p.%R'

●   Tworzymy katalog /home/login/cachegrind i
    nadajemy mu prawa 777
●   W CLI exportujemy zmienną:
    export XDEBUG_CONFIG=”profiler_enable=1 profiler_output_dir=/home/login/cachegrind/”
Profilowanie – analiza wyników
●   Narzędzia:
    –   KCacheGrind
    –   WinCacheGrind
    –   Webgrind
●   Analiza najczęściej wykonywanych
    fragmentów kodu
●   Odnajdywanie najdłużej wykonujących się
    fragmentów kodu
Profilowanie – pokaz na żywo
Śledzenie zużycia pamięci
●   Potrzebne ustawione zmienne:
    xdebug.auto_trace 1

    xdebug.trace_format 1

●   Przydatny skrypt:
    https://github.com/derickr/xdebug/raw/master/contrib/tracefile-analyser.php
●   Kłopotliwe do ustawienia z XDEBUG_CONFIG (nie działa).
    Przykładowe uruchomienie z CLI:
    php -d xdebug.auto_trace=1 -d xdebug.trace_format=1 shell.php akcja

    …

    php ~/tracefile-analyser.php /tmp/trace.2568677891.xt memory-own 20
Śledzenie zużycia pamięci – pokaz
Debugowanie w Eclipse
●   Jest możliwe
●   Największym problemem jest skonfigurowanie
    IDE
●   Google wie dużo na ten temat ;)
Dziękuję i zapraszam do pytań

Más contenido relacionado

La actualidad más candente

Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)Piotr Pelczar
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid PachowskiPROIDEA
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravel Poland MeetUp
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Laravel Poland MeetUp
 
3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managersMichał Michalczuk
 
Obalamy mity o wydajności frameworka Laravel cz. II
Obalamy mity o wydajności frameworka Laravel cz. IIObalamy mity o wydajności frameworka Laravel cz. II
Obalamy mity o wydajności frameworka Laravel cz. IILaravel Poland MeetUp
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux PROIDEA
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptJacek Okrojek
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z CapistranoMichał Szajbe
 

La actualidad más candente (20)

Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
[TestWarez 2017] Architektura frameworka testowego
[TestWarez 2017] Architektura frameworka testowego[TestWarez 2017] Architektura frameworka testowego
[TestWarez 2017] Architektura frameworka testowego
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
 
Laravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelnianiaLaravelowe paczki do uwierzytelniania
Laravelowe paczki do uwierzytelniania
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)Cykl życia zapytania HTTP (pod maską)
Cykl życia zapytania HTTP (pod maską)
 
3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers3Camp Tech 2016/11/15 - Front-end tooling: package managers
3Camp Tech 2016/11/15 - Front-end tooling: package managers
 
Obalamy mity o wydajności frameworka Laravel cz. II
Obalamy mity o wydajności frameworka Laravel cz. IIObalamy mity o wydajności frameworka Laravel cz. II
Obalamy mity o wydajności frameworka Laravel cz. II
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Websockety w PHP
Websockety w PHPWebsockety w PHP
Websockety w PHP
 
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux
PLNOG 4: Piotr Siwczak - Zarządzanie farmami serwerów Linux
 
Po co nam RSocket?
Po co nam RSocket?Po co nam RSocket?
Po co nam RSocket?
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 

Similar a Xdebug – debugowanie i profilowanie aplikacji PHP

xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) Laravel Poland MeetUp
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoDominik Szopa
 
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Droptica
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Grzegorz Bartman
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Michalis Kamburelis
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksXSolve
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linuxbm9ib2r5
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8Grzegorz Bartman
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Dariusz Kacban
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 

Similar a Xdebug – debugowanie i profilowanie aplikacji PHP (20)

xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
 
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
Codeception - jak zacząć pisać automatyczne testy do Drupala [PL]
 
Wstęp do profilowania aplikacji
Wstęp do profilowania aplikacjiWstęp do profilowania aplikacji
Wstęp do profilowania aplikacji
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
CodiLime Tech Talk - Michał Cłapiński, Mateusz Jabłoński: Debugging faultily ...
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Docker
DockerDocker
Docker
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
 
Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricks
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
Jak zarabiać na testowaniu oprogramowania(konferencja MeeTTech Piła 27.07.2016)
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 

Más de 3camp

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek3camp
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek3camp
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych3camp
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania3camp
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.3camp
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...3camp
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android3camp
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good3camp
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach3camp
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce3camp
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”3camp
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu3camp
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...3camp
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?3camp
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach3camp
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...3camp
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie3camp
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...3camp
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...3camp
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model3camp
 

Más de 3camp (20)

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
 

Xdebug – debugowanie i profilowanie aplikacji PHP

  • 1. Debugowanie z użyciem Xdebug Maciej Kosiedowski m.kosiedowski@polskapresse.pl Gdynia, 19.03.2013
  • 2. „W C++ o błędach powiadamia kompilator, natomiast w PHP klient” © http://roflcopter.pl/6434
  • 3. Do czego służy Xdebug? ● Xdebug to narzędzie pozwalające debugować PHP jak każdy inny język programowania: ● Wykonywać kod krok po kroku ● Sprawdzać chwilowe wartości zmiennych ● Wstawiać punkty przerwania (break-point) ● Podglądać stos wywołania ● Dodawać czujki (watch) ● Zmieniać wartości niektórych zmiennych w czasie wykonania ● Profilować aplikację
  • 4. Konfiguracja serwera ● Instalujemy Xdebuga ;) ● Dodajemy do pliku ~/.htaccess linie: php_value xdebug.remote_host 127.0.0.1 php_value xdebug.remote_port 9000 php_value xdebug.remote_enable On php_value xdebug.remote_handler dbgp php_value xdebug.remote_autostart Off ● Dodajemy do ~/.bashrc linię: export XDEBUG_CONFIG='remote_host=127.0.0.1 idekey=netbeans-xdebug' ● Podajemy adres IP swojego komputera, jeśli korzystamy z serwera deweloperskiego
  • 5. Konfiguracja własnego komputera ● W momencie uruchamiania debugowania serwer będzie próbował połączyć się z naszym komputerem ● Windows może blokować połączenia z serwera do IDE – w takim przypadku należy odpowiednio skonfigurować lub wyłączyć zaporę systemu Windows
  • 6. Instalacja dodatku do przeglądarki ● Firefox: easy Xdebug – https://addons.mozilla.org/en-us/firefox/addon/easy-xdebug/ – Dostępny po zainstalowaniu na domyślnie ukrytym pasku dodatków ● Chrome: Xdebug helper – https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc ● Opera: Xdebug – https://addons.opera.com/pl/extensions/details/xdebug/ ● Każdy dodatek może wymagać ustawiania w konfiguracji klucza debugowania konkretnego dla używanego IDE: – netbeans-xdebug dla Netbeansa – ECLIPSE_DBGP dla Eclipse ● Dodatek do Chrome domyślnie ustawiony jest pod Eclipse, pozostałe pod Netbeansa
  • 7. Konfiguracja IDE – Netbeans ● Ustawienia debugowania: – Włączamy obliczanie zmiennych i chmurek
  • 8. Konfiguracja IDE - Netbeans ● Ustawiamy projekt – Właściwości projektu → Run Configuration → Advanced – Wyłączamy otwieranie przeglądarki – Dodajemy mapowanie ścieżek jeśli działamy na serwerze deweloperskim
  • 9. Debugowanie – Netbeans ● Uruchamiamy sesję debugowania w Netbeansie za pomocą przycisku ● Uruchamiamy sesję debugowania w dodatku przeglądarki ● Wstawiamy punkt przerwania ● Odświeżamy stronę
  • 11. Profilowanie - konfiguracja ● Dodajemy do ~/.htaccess: php_value xdebug.profiler_enable 0 php_value xdebug.profiler_enable_trigger 1 php_value xdebug.profiler_output_dir '/home/login/cachegrind/' php_value xdebug.profiler_output_name 'cachegrind.out.%p.%R' ● Tworzymy katalog /home/login/cachegrind i nadajemy mu prawa 777 ● W CLI exportujemy zmienną: export XDEBUG_CONFIG=”profiler_enable=1 profiler_output_dir=/home/login/cachegrind/”
  • 12. Profilowanie – analiza wyników ● Narzędzia: – KCacheGrind – WinCacheGrind – Webgrind ● Analiza najczęściej wykonywanych fragmentów kodu ● Odnajdywanie najdłużej wykonujących się fragmentów kodu
  • 14. Śledzenie zużycia pamięci ● Potrzebne ustawione zmienne: xdebug.auto_trace 1 xdebug.trace_format 1 ● Przydatny skrypt: https://github.com/derickr/xdebug/raw/master/contrib/tracefile-analyser.php ● Kłopotliwe do ustawienia z XDEBUG_CONFIG (nie działa). Przykładowe uruchomienie z CLI: php -d xdebug.auto_trace=1 -d xdebug.trace_format=1 shell.php akcja … php ~/tracefile-analyser.php /tmp/trace.2568677891.xt memory-own 20
  • 16. Debugowanie w Eclipse ● Jest możliwe ● Największym problemem jest skonfigurowanie IDE ● Google wie dużo na ten temat ;)