Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Let’s talk about Xdebug

Slide 3

Slide 3 text

Jan Männig Senior CMS-Developer

Slide 4

Slide 4 text

Agenda Was ist Xdebug? Vorteile Voraussetzungen Einführung PHP-Konfiguration Einrichtung der IDE Toolbar im Browser Troubleshooting Einrichtung Anhang Weitere Einsatzgebiete Alternativen zu Xdebug Weiterführende Links Toolbar am Bsp. des PhpStorms Nutzung per Browser Besonderheiten im Terminal Besonderheiten mit BI Server Nutzung

Slide 5

Slide 5 text

Einführung

Slide 6

Slide 6 text

Einführung Was ist Xdebug? Debugger und Profiler für PHP Ermöglicht die Visualisierung des Programmablaufs in der IDE Abb. 1 Abb. 2 Abb. 3

Slide 7

Slide 7 text

Einführung Warum Xdebug nutzen? Abb. 4

Slide 8

Slide 8 text

Einführung Warum Xdebug nutzen? Zur Laufzeit kann im Quelltext interagiert werden Beschleunigung der Fehlersuche Einfacherer Einstieg in Bestandsprojekte Code-Basis bleibt sauber Abb. 5

Slide 9

Slide 9 text

Einführung PHP Xdebug-Extension für PHP Client, der die Informationen entgegennimmt und visualisiert Voraussetzungen

Slide 10

Slide 10 text

Einrichtung

Slide 11

Slide 11 text

Einrichtung zend_extension=/usr/local/php/7.0.17/lib/php/extensions/xdebug.so xdebug.remote_enable=On xdebug.remote_autostart=Off xdebug.remote_connect_back=Off ;xdebug.remote_host=192.168.111.98 xdebug.idekey=PHPSTORM xdebug.remote_port=9000 Alle Konfigurationen: www.xdebug.org/docs/all_settings Einstellungen in der php.ini PHP-Konfiguration Abb. 6

Slide 12

Slide 12 text

Einrichtung PHP-Konfiguration Abb. 9 Abb. 8 Abb. 7

Slide 13

Slide 13 text

Einrichtung Einrichtung der IDE am Beispiel des PhpStorm 2017.2 Globale Debugger-Settings in PhpStorm können im Normalfall beibehalten werden Abb. 10

Slide 14

Slide 14 text

Einrichtung Einrichtung einer neuen „Run/Debug Configuration“ Einrichtung der IDE am Beispiel des PhpStorm 2017.2 Abb. 11 Abb. 12

Slide 15

Slide 15 text

Einrichtung Einrichtung der IDE am Beispiel des PhpStorm 2017.2 Auswahl und Konfiguration des Zielservers Abb. 13 Abb. 14 Abb. 15

Slide 16

Slide 16 text

Einrichtung Setzen des IDE-Schlüssels Einrichtung der IDE am Beispiel des PhpStorm 2017.2 Abb. 16

Slide 17

Slide 17 text

Einrichtung Toolbar im Browser Verschiedene Toolbars für gängige Browser Möglichkeit zur Steuerung der „Debug“- und „Profiling“-Prozesse Abb. 17 Abb. 18

Slide 18

Slide 18 text

Der Teufel steckt im Detail!

Slide 19

Slide 19 text

Einrichtung Xdebug logging Ausgabe bei falscher IP: Troubleshooting xdebug.remote_log=/tmp/xdebug.log root@t3ugdd:/tmp# tail -f xdebug.log Log opened at 2017-09-09 14:43:45 I: Checking remote connect back address. I: Checking header 'HTTP_X_FORWARDED_FOR'. I: Checking header 'REMOTE_ADDR'. I: Remote address found, connecting to 192.168.34.1:9000. E: Time-out connecting to client. :-( Log closed at 2017-09-09 14:43:45 Abb. 20 Abb. 19

Slide 20

Slide 20 text

Einrichtung Troubleshooting Setzen der direkten IP Deaktivieren „xdebug.remote_connect_back“ xdebug.remote_connect_back=Off xdebug.remote_host=192.168.2.107 Interne IP des 
 eigenen Rechners Abb. 21 Abb. 22

Slide 21

Slide 21 text

Einrichtung TCP-Dump Netzwerkverkehr auf Port 9000 in beide Richtungen: Netzwerkverkehr auf Port 9000 von IDE zu Xdebug: Netzwerkverkehr auf Port 9000 von Xdebug zu IDE: Troubleshooting tcpdump -ni eth1 -n port 9000 -X tcpdump -ni eth1 -n src port 9000 -X tcpdump -ni eth1 -n est port 9000 -X Abb. 25 Abb. 24 Abb. 23

Slide 22

Slide 22 text

Einrichtung Troubleshooting Prüfung der Debugger-Konfiguration durch PhpStorm Menü: Run => Web Server Debug Validation Abb. 26

Slide 23

Slide 23 text

Nutzung

Slide 24

Slide 24 text

Nutzung Erläuterung der Toolbar am Bsp. des PhpStorm Interaktion innerhalb der Applikation: Rerun ‚xdebug‘ -> Neustart der Xdebug-Session Show Execution Point -> Springt zum aktuellen Ausführungspunkt Step Over -> Springt zur nächsten auszuführenden Code-Zeile Step Into -> Springt in die Methode des aktuellen Ausführungspunkt überspringt einfache Methode wie z.B. „getter“ Force Step Into -> Erzwingt den Sprung in die Methode auch wenn diese sonst zu überspringen ist Step Out -> Springt aus der aktuellen Methode heraus, zur nächsten auszuführenden Zeile Run to Cursor -> Setzt die Ausführung des Codes fort, pausiert an der aktuellen Cursorposition Alle Elemente: www.jetbrains.com/help/idea/debug-tool-window.html Allgemeine Steuerung der Ausführung: Debug -> Setzt die Ausführung der Applikation fort Stop -> Bricht die aktuelle Ausführung ab und beendet die Xdebug-Session View Breakpoints -> Zeigt eine Übersicht aller vorhandenen Breakpoints Mute Breakpoints -> Ändert den Status der vorhandenen Breakpoint (aktiviert/deaktiviert) Start Listening for PHP Debug Connections -> Aktiviert das „Lauschen“ auf bzgl. einkommender Daten

Slide 25

Slide 25 text

Nutzung Erläuterung der Toolbar am Bsp. des PhpStorm Abhängige Breakpoints mit Condition Ab PhpStorm 2017.2 möglich [CTRL] + Klick auf vorhandenen Breakpoint Abb. 27

Slide 26

Slide 26 text

Nutzung Debugging über den Browser Abb. 28

Slide 27

Slide 27 text

Nutzung Debugging über den Browser Abb. 31 Abb. 30 Abb. 29

Slide 28

Slide 28 text

Nutzung Session-Start wenn „remote_autostart“ deaktiviert Besonderheiten im Terminal php -dxdebug.remote_autostart=1 /var/www/html/typo3/sysext/core/bin/typo3 Abb. 32 Abb. 33

Slide 29

Slide 29 text

Nutzung Besonderheiten bei der Arbeit mit dem PHP „built-in" Server Anpassung der PHP-Konfiguration 
 Aktivieren des „Lauschens“ 
 Keine „Run/Debug Configuration“ notwendig Eintragung der „Hosts“-Datei beachten 
 Zu viele Prozesse gefährden die Performance der Applikationen xdebug.remote_enabled = On xdebug.remote_autostart = On 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost Abb. 34 Abb. 35 Abb. 36

Slide 30

Slide 30 text

Anhang

Slide 31

Slide 31 text

Anhang Weitere Einsatzgebiete Profiling: auffinden von sogenannten „Bottlenecks“ die zu Performanceproblemen führen Code Coverage: Prüfung der Testabdeckung im Zusammenspiel mit PHPUnit Abb. 37

Slide 32

Slide 32 text

Anhang Alternativen zu Xdebug Bekannteste Alternative zu Xdebug ist Zend Debugger Unterstützung „out of the box“ von PhpStorm nur als Binary erhältlich Deutlich geringere Verbreitung, da von bekannten IDEs wie Netbeans und Eclipse nicht unterstützt Abb. 38

Slide 33

Slide 33 text

Vielen Dank!

Slide 34

Slide 34 text

Screens und Icons: PhpStorm 2017.2.3 Sonstige Grafiken: 
 
 Quellen

Slide 35

Slide 35 text

Abbildungen Abb. 1 PhpStorm: Editor-Ansicht Abb. 2 PhpStorm: Debugger Bereich „Variables“ Abb. 3 PhpStorm: Debug-Console Abb. 4 Bitbucket: Ansicht eines Pullrequests Abb. 5 PhpStorm: Editoransicht mit Breakpoint Abb. 6 Auszug aus der PHP-Konfiguration (php.ini) Abb. 7 phpinfo: Zendextension Xdebug Abb. 8 phpinfo: Xdebug version Abb. 9 phpinfo: Xdebug settings Abb. 10 PhpStorm: allgemeine Debugger Settings Abb. 11 PhpStorm: Auswahl neuer Run/Debug Configuration Abb. 12 PhpStrom: PHP Remote Debug Configuration Abb. 13 PhpStrom: Leere Auflistung Deployment Configurations Abb. 14 PhpStrom: Auswahl vorhandener Deployment-Konfiguration Abb. 15 PhpStrom: Abschluss der Deployment-Konfiguration Abb. 16 PhpStrom: Abschluss „Run/Debug Configuration“ Abb. 17 Xdebug-Plugin für Chrome Abb. 18 Xdebug-Plugin für Firefox Abb. 19 PHP-Konfiguration zur Aktivierung des Xdebug-Logs Abb. 20 Auszug aus den Logeinträgen von Xdebug mit fehlgeschlagener Verbindung Abb. 21 Netzwerk Anzeige des Macbooks Abb. 22 PHP-Konfiguration für eine feste Client-IP Abb. 23 Terminaleingabe um den Netzverkehr zu prüfen (alle Richtungen) Abb. 24 Terminaleingabe um den Netzverkehr zu prüfen (zum Server) Abb. 25 Terminaleingabe um den Netzverkehr zu prüfen (zum Client) Abb. 26 PhpStorm: Dialog zum Validieren Debugger-Konfiguration Abb. 27 PhpStorm: Dialog zur Nutzung von Breakpoints mit Abhängigkeiten Abb. 28 Fehlerausgabe im Browser Abb. 29 PhpStorm: Editor Ansicht mit angewählten Breakpoint Abb. 30 PhpStorm: Frames und Variablenübersicht in dem Debugger-Dialog Abb. 31 PhpStorm: Debug-Console Abb. 32 PhpStorm: Editor-Ansicht während der Debug-Session Abb. 33 PhpStorm: Debugger-Ansicht während einer laufenden Session Abb. 34 PHP-Konfiguration (php.ini) und Xdebug zu aktivieren Abb. 35 PHP-Konfiguration (php.ini) um Xdebug immer zu starten Abb. 36 Standardeintragungen in der Hosts-Datei Abb. 37 Code Coverage Analyse Abb. 38 PhpStorm: Allgemeine Settings im Zend Debugger