Netbeans e Xdebug per debugging e profiling di applicazioni PHP

download Netbeans e Xdebug per debugging e profiling di applicazioni PHP

If you can't read please download the document

Transcript of Netbeans e Xdebug per debugging e profiling di applicazioni PHP

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]