Netbeans e Xdebug per debugging e profiling di applicazioni PHP

3,631 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,631
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
20
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Netbeans e Xdebug per debugging e profiling di applicazioni PHP

  1. 1. Netbeans e Xdebug per debugging e profiling di applicazioni PHP di Giorgio Cefaro
  2. 2. Netbeans IDE 7 <ul><li>Software libero, Open source (CDDL & GPL v.2)
  3. 3. Multipiattaforma (Linux, Solaris, OSX, Windows)
  4. 4. Supporto avanzato PHP: </li><ul><li>Editor con evidenziatore di sintassi e autocompletamento
  5. 5. Project Management
  6. 6. PhpDoc, Rename refactoring, Safe Delete Refactoring
  7. 7. Versioning
  8. 8. Supporto Symfony
  9. 9. Debugging
  10. 10. Integrazione con Apache, download e upload FTP, Mysql </li></ul></ul>http://netbeans.org/features/php/
  11. 11. Debugging PHP con Netbeans <ul><li>Ispezionare variabili
  12. 12. Watches
  13. 13. Breakpoints
  14. 14. Controllo flusso applicazione (Continue,
  15. 15. Step Over, Step Into, Step Out)
  16. 16. Debugging locale o remoto </li></ul>
  17. 18. Xdebug <ul><li>Estensione PHP per il debugging e profiling
  18. 19. Caratteristiche: </li><ul><li>Stack trace per gli errori con </li><ul><li>Visualizzazione parametri della funzione
  19. 20. Indicazioni nome funzione, nome file e linea
  20. 21. Member functions </li></ul><li>Allocazione memoria
  21. 22. Protezione dalle ricorsioni infinite
  22. 23. Analisi copertura codice
  23. 24. Debug interattivo attraverso client compatibile
  24. 25. Profiling </li></ul></ul>http://www.xdebug.org/
  25. 26. Easy Xdebug per Firefox <ul><li>Switch per passare in qualsiasi momento alla modalità debugging
  26. 27. Switch per attivare il profiling
  27. 28. Supporto Netbeans
  28. 29. Permette di evitare di riaprire ogni volta una sessione nuova di browsing </li></ul>https://addons.mozilla.org/en-US/firefox/addon/easy-xdebug/
  29. 30. Configurare Xdebug - php.ini xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=example.com xdebug.remote_port=9000 xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /debug/ xdebug.profiler_append = 1 xdebug.profiler_output_name = debug.out.%s xdebug.profiler_enable_trigger = 1
  30. 31. 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)
  31. 32. Profiling - Quando? <ul><li>Spesso, se le performance sono un requisito! </li><ul><li>Regolarmente durante lo sviluppo per individuare e tenere sotto controllo le zone critiche della nostra applicazione
  32. 33. Prima del refactoring per immergersi alla profondità giusta ed individuare con precisione cosa influisce negativamente sulle performance e come
  33. 34. Durante il refactoring con l'ausilio di stress tool per valutare l'impatto sulle performance apportate da ogni cambiamento effettuato </li></ul></ul>
  34. 35. Configurare Xdebug profiler - php.ini xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=example.com xdebug.remote_port=9000 xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /debug/ xdebug.profiler_append = 1 xdebug.profiler_output_name = debug.out.%s xdebug.profiler_enable_trigger = 1
  35. 36. La classe utilizzata per il test
  36. 37. La classe utilizzata per il test
  37. 38. Il test
  38. 39. L'output del profiler <ul><li>Un file di testo molto corposo, difficile da interpretare senza strumenti opportuni
  39. 40. Occhio! Un banalissimo click potrebbe far produrre centinaia di mb di output del profiler!
  40. 41. I tool di analisi: </li><ul><li>KCachegrind (Linux, KDE)
  41. 42. Webgrind (web-based PHP5)
  42. 43. MacCallGrind (OSX)
  43. 44. WinCacheGrind (ma davvero sviluppate su windows?) </li></ul></ul>
  44. 45. 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.
  45. 46. KCachegrind <ul><li>Rappresentazione ad area del tempo speso da ogni chiamata </li><ul><li>Massima profondità di annidamento
  46. 47. Solo livello di profondità di una particolare chiamata </li></ul><li>Rappresentazione a grafo delle chiamate </li><ul><li>Max profondità chiamante e chiamata
  47. 48. Min node cost, max node cost </li></ul><li>Visualizzazione sorgente </li></ul>
  48. 51. Real World Example - ORM <ul><li>(O della mia relazione complicata con Doctrine) </li><ul><li>Sono pigro e riempio l'applicazione di idratazioni di oggetti spesso completamente inutili
  49. 52. Sono pigro ed eseguo un ciclo di N query per modificare o validare altrettanti record in modo del tutto simile
  50. 53. Peggio! Sono scemo e recupero ed idrato N oggetti dal db solo per effettuare lo stesso set<Qualcosa> su ognuno di essi! </li></ul></ul>
  51. 54. Real World Example – Symfony
  52. 55. Real World Example – Symfony
  53. 57. Linkedin: /giorgiocefaro Twitter: /giorrrgio Email: giorgio.cefaro@gmail.com

×