netbeans e xdebug per debugging e profiling di applicazioni php
TRANSCRIPT
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
di Giorgio Cefaro
Netbeans IDE 7
Software libero, Open source (CDDL & GPL v.2)
Multipiattaforma (Linux, Solaris, OSX, Windows)
Supporto avanzato PHP:Editor con evidenziatore di sintassi e autocompletamento
Project Management
PhpDoc, Rename refactoring, Safe Delete Refactoring
Versioning
Supporto Symfony
Debugging
Integrazione con Apache, download e upload FTP, Mysql
http://netbeans.org/features/php/
Debugging PHP con Netbeans
Ispezionare variabili
Watches
Breakpoints
Controllo flusso applicazione (Continue, Step Over, Step Into, Step Out)
Debugging locale o remoto
Xdebug
Estensione PHP per il debugging e profiling
Caratteristiche:Stack trace per gli errori conVisualizzazione parametri della funzione
Indicazioni nome funzione, nome file e linea
Member functions
Allocazione memoria
Protezione dalle ricorsioni infinite
Analisi copertura codice
Debug interattivo attraverso client compatibile
Profiling
http://www.xdebug.org/
Easy Xdebug per Firefox
Switch per passare in qualsiasi momento alla modalit debugging
Switch per attivare il profiling
Supporto Netbeans
Permette di evitare di riaprire ogni volta una sessione nuova di browsing
https://addons.mozilla.org/en-US/firefox/addon/easy-xdebug/
Configurare Xdebug - php.ini
xdebug.remote_enable=onxdebug.remote_handler=dbgpxdebug.remote_mode=reqxdebug.remote_host=example.comxdebug.remote_port=9000xdebug.profiler_enable = 1xdebug.profiler_output_dir = /debug/xdebug.profiler_append = 1xdebug.profiler_output_name = debug.out.%sxdebug.profiler_enable_trigger = 1
Profiling Cos'?
Investigation of a program's behavior using information gathered as the program executes. The usual purpose of this analysis is to determine which sections of a program to optimize - to increase its overall speed, decrease its memory requirement or sometimes both.
http://en.wikipedia.org/wiki/Profiling_(computer_programming)
Profiling - Quando?
Spesso, se le performance sono un requisito!Regolarmente durante lo sviluppo per individuare e tenere sotto controllo le zone critiche della nostra applicazione
Prima del refactoring per immergersi alla profondit giusta ed individuare con precisione cosa influisce negativamente sulle performance e come
Durante il refactoring con l'ausilio di stress tool per valutare l'impatto sulle performance apportate da ogni cambiamento effettuato
Configurare Xdebug profiler - php.ini
xdebug.remote_enable=onxdebug.remote_handler=dbgpxdebug.remote_mode=reqxdebug.remote_host=example.comxdebug.remote_port=9000xdebug.profiler_enable = 1xdebug.profiler_output_dir = /debug/xdebug.profiler_append = 1xdebug.profiler_output_name = debug.out.%sxdebug.profiler_enable_trigger = 1
La classe utilizzata per il test
La classe utilizzata per il test
Il test
L'output del profiler
Un file di testo molto corposo, difficile da interpretare senza strumenti opportuni
Occhio! Un banalissimo click potrebbe far produrre centinaia di mb di output del profiler!
I tool di analisi:KCachegrind (Linux, KDE)
Webgrind (web-based PHP5)
MacCallGrind (OSX)
WinCacheGrind (ma davvero sviluppate su windows?)
KCachegrind
http://kcachegrind.sourceforge.net
KCachegrind visualizes traces generated by profiling, including a tree map and a call graph visualization of the calls happening. It's designed to be fast for very large programs like KDE applications.
KCachegrind
Rappresentazione ad area del tempo speso da ogni chiamataMassima profondit di annidamento
Solo livello di profondit di una particolare chiamata
Rappresentazione a grafo delle chiamateMax profondit chiamante e chiamata
Min node cost, max node cost
Visualizzazione sorgente
Real World Example - ORM
(O della mia relazione complicata con Doctrine)Sono pigro e riempio l'applicazione di idratazioni di oggetti spesso completamente inutili
Sono pigro ed eseguo un ciclo di N query per modificare o validare altrettanti record in modo del tutto simile
Peggio! Sono scemo e recupero ed idrato N oggetti dal db solo per effettuare lo stesso set su ognuno di essi!
Real World Example Symfony
Real World Example Symfony
Linkedin: /giorgiocefaroTwitter: /giorrrgioEmail: [email protected]